Elastic Search+LogStash+logback收集springboot运行日志

部署Elastic Search和LogStash的过程不再说明,请先部署好。

使用logback-spring.xml输出日志:这里只写使用,具体的细节可以百度

  • application.yml
logging:
  # 指定logback-spring的位置,可以挂载项目外面的配置文件(方便修改)
  config: classpath:log/logback-spring.xml
  # 指定项目日志的输出路径,这里指定的是目录级别,具体的文件名在logback-spring.xml配置
  path: D:/data/logs
  # 输出日志级别
  level:
    root: info
  • logback-spring.xml

<configuration>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %-38logger{36} : %msg%npattern>
            
        layout>
    appender>
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %-41logger{41} : %msg%npattern>
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_PATH}/oss.%d.logfileNamePattern>
            <maxHistory>30maxHistory>
        rollingPolicy>
    appender>
    
    <springProfile name="dev">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
        root>
    springProfile>
    <springProfile name="test">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
        root>
    springProfile>
    <springProfile name="prod">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
        root>
    springProfile>
configuration>

这样就可以实现通过logback-spring.xml指定输出日志格式,按天划分日志文件。

LogStash收集日志文件

  • 添加pom依赖
        <dependency>
            <groupId>net.logstash.logbackgroupId>
            <artifactId>logstash-logback-encoderartifactId>
            <version>4.10version>
        dependency>
  • logback-spring.xml添加规则:日志向logstash服务器输出一份
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        
        <destination>*.*.*.*:4567destination>
        
         
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <timestamp/>
                <version/>
                <message/>
                <loggerName/>
                <threadName/>
                <logLevel/>
                <callerData/>
            providers>
        encoder>
    appender>

logback-spring.xml中根据每个环境是否需要收集日志,配置引用:只有生产环境需要

<springProfile name="dev">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
        root>
    springProfile>
    <springProfile name="test">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
        root>
    springProfile>
    <springProfile name="prod">
        
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
            
            <appender-ref ref="LOGSTASH"/>
        root>
    springProfile>
  • 配置logstash的配置文件
    • 在LogStash的安装目录下,新增一个配置文件,例:boot_log.conf(也可以配置filter添加解析规则)
input {
  tcp {
    port => 4567
    codec => json_lines
  }

}

output {
    elasticsearch {
        hosts => ["*.*.*.*:9200"]
        action=>"index"
        #ES索引名称(自己定义的)
        #index => "%{[appname]}-%{+YYYY.MM.dd}"
        index => "boot"
    }
    stdout{
       codec => json_lines
    }
}

查看结果

  • 运行logstash
bin/logstash -f boot_log.conf
  • 启动springboot项目,就能看到ES中出现boot的index,刷新查看条数在不断新增,这是启动日志已经进入了ES

Elastic Search+LogStash+logback收集springboot运行日志_第1张图片

你可能感兴趣的:(springboot,LogStash,elastic,search)