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
<?xml version="1.0" encoding="utf-8"?>
<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%n</pattern>
            <!--<pattern>%d - %msg%n</pattern>-->
        </layout>
    </appender>
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %-41logger{41} : %msg%n</pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${LOG_PATH}/oss.%d.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </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.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>4.10</version>
        </dependency>
  • logback-spring.xml添加规则:日志向logstash服务器输出一份
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--  这是是logstash服务器地址,端口随意,和之后logstash的配置文件保持一致-->
        <destination>*.*.*.*:4567</destination>
        <!--输出的格式,推荐使用这个-->
         
        <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"/>
            <!-- 需要采集日志到logstash -->
            <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

laolvbig

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章