0

I am using "org.springframework.amqp.rabbit.log4j.AmqpAppender" class for writing logs into Rabbitmq. All I want is my application log should be enqueued in json format which will eventually be dequeued for elastic search. What will be correct format/pattern for logging in JSON format or is there any library that I can use???

RIPAN
  • 3,326
  • 4
  • 17
  • 28

1 Answers1

0

It depends on what is used to parse log messages. For example, you can use logstash for that purposes. In case of log stash there is a library which implements log4j layout to format proper json event messages for logstash: log4j-jsonevent-layout. Your appender configuration will look like:

<appender name="amqp" class="org.springframework.amqp.rabbit.log4j.AmqpAppender">
    <param name="host" value="localhost" />
    <param name="port" value="5672" />
    <param name="virtualHost" value="/" />
    <param name="username" value="guest" />
    <param name="password" value="guest" />
    <param name="exchangeName" value="logs" />
    <param name="exchangeType" value="topic" />
    <param name="routingKeyPattern" value="%c.%p" />
    <param name="applicationId" value="AppId" />
    <param name="declareExchange" value="true" />
    <param name="durable" value="true" />
    <param name="contentType" value="text/plain" />
    <param name="senderPoolSize" value="2" />
    <param name="maxSenderRetries" value="30" />
    <layout class="net.logstash.log4j.JSONEventLayoutV1" >
        <param name="UserFields" value="field1:test" />
    </layout>
</appender>

You can always write your own layout.

Also, some appender alternatives: rabbitmq-log4j-appender

alsid
  • 490
  • 6
  • 14
  • Thanks @alsid for your answer. I have created one custom appender and using ch.qos.logback.contrib.jackson.JacksonJsonFormatter along with ch.qos.logback.contrib.json.classic.JsonLayout for the purpose and it worked for me. – RIPAN Jun 06 '16 at 12:25