[logback-user] Using Logback with RabbitMQ

Ciprian Dorin Craciun ciprian.craciun at gmail.com
Sat Oct 20 20:19:43 CEST 2012


On Fri, Oct 19, 2012 at 12:32 AM, Smith, Larry (ECS - Enterprise Cloud
Service) <larry.smith5 at hp.com> wrote:
> Hi all,
>
> Tried looking this up on the net, but there is nothing recent. I would like
> to use an appender (standard or custom) that could interface with RabbitMQ.
>
> I have a need to see logging data in real time, but cannot use the console
> nor a database.
>
> I would assume that a custom appender can be written to communicate with the
> RabbitMQ exchange, and I would also like to be able to disable the appender
> when it is not required.
>
> Any ideas on how to begin this?


    Glad to hear someone is interested in such a thing, that is to use
RabbitMQ as a Logback transport system.

    There is such a solution, open sourced under Apache 2 license,
composed of both a Logback appender, and then a client that allows you
to fetch the events. (Disclaimer: I'm the code's author.) :)
      https://github.com/arkitech/logging-java
    (and my own repository: https://github.com/cipriancraciun/logging-java )

    The architecture is very simple:
    * for the publisher side, you just add in your dependencies the
AMQP publisher, plus some custom configuration inside `logback.xml`;
(see the below link for a `logback.xml` example;)
      https://github.com/cipriancraciun/logging-java/blob/master/logging-conapp/src/main/config/logback-publisher-example.xml
    * for the client side I've borrowed the idea from other networked
publishers from the logback code, that is I consume the events from
the RabbitMQ server, and I push them back into the logback system,
thus you can configure their routing as normal towards files,
database, etc. on the collector side; again all you need to do is add
something inside the `logback.xml` file like in the example below:
      https://github.com/cipriancraciun/logging-java/blob/master/logging-conapp/src/main/config/logback-consumer-example.xml
    to run the consumer just `mvn package` the `loggin-connapp` and
`java -jar logging-connapp.jar`;

    As features:
    * it buffers events in memory if the connection to the broker is
down; (if needed capacity limits are trivial to add in the code;)
    * it reconnects to the broker in case of connectivity failures;
    * it publishes the messages on a separate thread than where the
message was created; (thus the incurred overhead is minimal;)

    As potential issues:
    * it uses native Java serialization to encode the messages, thus
you can't just look at the messages with any RabbitMQ consumer; (of
course the code is quite modular and you could replace that with
JSON);
    * you can't enable and disable the appender, but you can make the
logger itself suspend the publishing;

    As for it's stability it has been used in production for over a
year with only minor incidents (due to serialization exceptions).

    Unfortunately the documentation is almost non-existing in the
repository, except those example files, but if there is someone
interested in using it, I could easily add it.

    Of course I can also answers questions directly on this mailing
list or through a private email.

    Ciprian.


    P.S.: Inside the same repository there is an "experimental"
BerkeleyDB + Lucene support to store and query the logs, but these are
experimental only...

    P.P.S: If you are **really** interested in using the appender or
the consumer, but you require other features and they are easy to
implement I could try to implement them.


More information about the Logback-user mailing list