使用logstash结合logback收集微服务日志

柔光的暖阳◎ 2023-06-28 13:28 156阅读 0赞

因为公司开发环境没有装elk,所以每次查看各个微服务的日志只能使用如下命令
format_png

这样子访问日志是并不方便,于是想为每个微服务的日志都用logstash收集到一个文件out中,那以后只要输出这个文件则可查看所有的日志

  • 结合logback和logstash收集日志

1.为需要收集日志的微服务引入logstash-logback-encode依赖

  1. //用logstash收集logback
  2. compile 'net.logstash.logback:logstash-logback-encoder:5.2'

2.编写logback.xml并设置appender指定logstash的ip端口

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <include resource="org/springframework/boot/logging/logback/base.xml"/>
  4. <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  5. <destination>127.0.0.1:9100</destination>
  6. <includeCallerData>true</includeCallerData>
  7. <encoder class="net.logstash.logback.encoder.LogstashEncoder">
  8. <includeCallerData>true</includeCallerData>
  9. </encoder>
  10. </appender>
  11. <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  12. <file>log/weather.log</file>
  13. <append>true</append>
  14. <encoder>
  15. <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
  16. </encoder>
  17. </appender>
  18. <logger name="com.wugui" level="info" additivity="false">
  19. <appender-ref ref="CONSOLE"/>
  20. <appender-ref ref="stash" />
  21. <appender-ref ref="FILE"/>
  22. </logger>
  23. <logger name="com.wugui.spring.cloud.weather.Service" level="debug" additivity="false">
  24. <appender-ref ref="CONSOLE"/>
  25. <appender-ref ref="stash" />
  26. </logger>
  27. </configuration>

3.编写logstash启动引用的配置文件test.conf

  1. input {
  2. tcp {
  3. ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9250端口接收logback发出的消息
  4. host => "127.0.0.1"
  5. port => 9100
  6. mode => "server"
  7. tags => ["tags"]
  8. codec => json_lines
  9. }
  10. }
  11. output {
  12. stdout { codec => rubydebug }
  13. #输出到es
  14. elasticsearch { hosts => "127.0.0.1:9200" }
  15. #输出到一个文件中
  16. file {
  17. path => "D:/study/springcloud_house/ELK/logstash-6.1.1/out"
  18. codec => line
  19. }
  20. }

4.用powershell启动Logstash并引用自定义配置文件

  1. .\bin\logstash -f test.conf

5.运行微服务,可观察到logstash控制台在输出收集到的日志
format_png 1

注意:

当使用springBootVersion =2.0.1.RELEASE时,引用依赖compile ‘net.logstash.logback:logstash-logback-encoder:4.7’会报错,报错信息如下:

  1. ERROR in net.logstash.logback.appender.LogstashTcpSocketAppender[stash] - Unable start disruptor java.lang.NoSuchMethodError: ch.qos.logback.core.encoder.Encoder.init(Ljava/io/OutputStream;)V
  2. at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:166)
  3. at org.springframework.boot.logging.logback.LogbackLoggingSystem.reinitialize(LogbackLoggingSystem.java:212)
  4. at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:75)
  5. at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
  6. at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:114)
  7. at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:264)
  8. at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:237)
  9. at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:200)
  10. at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:173)
  11. at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
  12. at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
  13. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
  14. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
  15. at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
  16. at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
  17. at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:358)
  18. at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
  19. at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:137)
  20. at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:197)
  21. at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:104)
  22. at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:70)
  23. at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
  24. at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
  25. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
  26. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
  27. at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
  28. at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
  29. at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:358)
  30. at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
  31. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
  32. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
  33. at com.wugui.spring.cloud.weather.Application.main(Application.java:14)

解决办法:引入最新的logstash-logback-encoder依赖即可

  1. compile 'net.logstash.logback:logstash-logback-encoder:5.2'

发表评论

表情:
评论列表 (有 0 条评论,156人围观)

还没有评论,来说两句吧...

相关阅读