部署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