Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. package nz.govt.mpi.util;
  2.  
  3. import org.springframework.amqp.core.Message;
  4. import org.springframework.amqp.rabbit.logback.AmqpAppender;
  5.  
  6. import ch.qos.logback.classic.spi.ILoggingEvent;
  7. import ch.qos.logback.core.encoder.Encoder;
  8. import lombok.Getter;
  9. import lombok.Setter;
  10.  
  11. public class AmqpLogbackAppender extends AmqpAppender {
  12.  
  13. @Getter
  14. @Setter
  15. private Encoder<ILoggingEvent> encoder;
  16.  
  17. /**
  18. * We remove the default message layout and replace with the JSON {@link Encoder}
  19. */
  20. @Override
  21. public Message postProcessMessageBeforeSend(Message message, Event event) {
  22. return new Message(this.encoder.encode(event.getEvent()), message.getMessageProperties());
  23. }
  24.  
  25. @Override
  26. public void start() {
  27. super.start();
  28. encoder.setContext(getContext());
  29.  
  30. if (!encoder.isStarted()) {
  31. encoder.start();
  32. }
  33.  
  34. }
  35.  
  36. @Override
  37. public void stop() {
  38. super.stop();
  39. encoder.stop();
  40. }
  41.  
  42. }
  43.  
  44. <?xml version="1.0" encoding="UTF-8"?>
  45. <configuration>
  46. <springProperty scope="context" name="rabbitMQHost" source="logback.amqp.host" defaultValue="localhost"/>
  47. <springProperty scope="context" name="rabbitMQPort" source="logback.amqp.port" defaultValue="5672"/>
  48. <springProperty scope="context" name="rabbitMQUsername" source="spring.rabbitmq.username" />
  49. <springProperty scope="context" name="rabbitMQPassword" source="spring.rabbitmq.password" />
  50. <springProperty scope="context" name="rabbitMQExchangeName" source="logback.amqp.exchange.name" defaultValue="mpi.tradedev"/>
  51. <springProperty scope="context" name="rabbitMQRoutingKey" source="logback.amqp.routing.key" defaultValue="mpi.tradedev.logging"/>
  52. <springProperty scope="context" name="serviceName" source="spring.application.name" />
  53.  
  54. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  55. <encoder>
  56. <pattern>%d{HH:mm:ss.SSS} [%thread, %X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %-5level %logger{36} - %msg%n</pattern>
  57. </encoder>
  58. </appender>
  59.  
  60. <appender name="AMQP" class="nz.govt.mpi.util.AmqpLogbackAppender">
  61. <!-- layout is required but ignored as using the encoder for the AMQP message body -->
  62. <layout><pattern><![CDATA[ %level ]]></pattern></layout>
  63.  
  64. <encoder class="net.logstash.logback.encoder.LogstashEncoder">
  65. <customFields>{"serviceName": "${serviceName}"}</customFields>
  66. </encoder>
  67.  
  68. <!-- RabbitMQ connection -->
  69. <host>${rabbitMQHost}</host>
  70. <port>${rabbitMQPort}</port>
  71. <username>${rabbitMQUsername}</username>
  72. <password>${rabbitMQPassword}</password>
  73. <exchangeName>${rabbitMQExchangeName}</exchangeName>
  74. <routingKeyPattern>${rabbitMQRoutingKey}</routingKeyPattern>
  75.  
  76. <declareExchange>true</declareExchange>
  77. <exchangeType>topic</exchangeType>
  78. <generateId>true</generateId>
  79. <charset>UTF-8</charset>
  80. <durable>true</durable>
  81. <deliveryMode>PERSISTENT</deliveryMode>
  82.  
  83. </appender>
  84.  
  85. <root level="info">
  86. <appender-ref ref="STDOUT" />
  87. <appender-ref ref="AMQP" />
  88. </root>
  89. </configuration>
  90.  
  91. spring.application.name=my-app
  92. logback.amqp.host=localhost
  93. logback.amqp.port=5672
  94. logback.amqp.exchange.name=ex_logstash
  95. logback.amqp.routing.key=my-app.logging
  96. spring.rabbitmq.username=rquser
  97. spring.rabbitmq.password=rqpass
  98.  
  99. input {
  100. rabbitmq {
  101. host => "localhost"
  102. queue => "qu_logstash"
  103. durable => true
  104. exchange => "ex_logstash"
  105. key => "my-app.*"
  106. threads => 10
  107. type => "topic"
  108. prefetch_count => 200
  109. port => 5672
  110. user => "rquser"
  111. password => "rqpass"
  112. }
  113. }
  114.  
  115. <dependency>
  116. <groupId>org.springframework.cloud</groupId>
  117. <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
  118. </dependency>
  119. <dependency>
  120. <groupId>net.logstash.logback</groupId>
  121. <artifactId>logstash-logback-encoder</artifactId>
  122. <version>4.9</version>
  123. </dependency>
  124. <dependency>
  125. <groupId>ch.qos.logback</groupId>
  126. <artifactId>logback-classic</artifactId>
  127. <version>1.2.3</version>
  128. </dependency>
  129. <dependency>
  130. <groupId>ch.qos.logback</groupId>
  131. <artifactId>logback-core</artifactId>
  132. <version>1.2.3</version>
  133. </dependency>
  134. <dependency>
  135. <groupId>org.projectlombok</groupId>
  136. <artifactId>lombok</artifactId>
  137. <scope>provided</scope>
  138. </dependency>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement