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