logback将日志写入到ELK
springboot中使用logback将日志写入到ELK平台
ELK 是由elasticsearch 、logstash、kibana 三个单词的首字母组成
elasticsearch: 一款优秀的开源分布式搜索引擎系统
logstash:开源的日志分析、过滤、收集工具
kibana: ES的图形化用户界面
这三款产品都是 ES 家族的产物,官网: https://www.elastic.co
springboot中使用logback将日志写入到ELK平台
把日志转成json文件即可

1、pom.xml配置
|
1
2
3
4
5
6
|
<!--集成 logstash 日志--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<?xml version="1.0" encoding="UTF-8"?><configuration> <!--指定property属性变量--> <property name="log.path" value="/logs/logdemo"/> <!-- 日志输出格式 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n --> <!-- 控制台 appender--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 文件 滚动日志 (all)--> <appender name="allLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当前日志输出路径、文件名 --> <file>${log.path}/all.log</file> <!--日志输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!--历史日志归档策略--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 历史日志: 归档文件名 --> <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/all.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!--单个文件的最大大小--> <maxFileSize>64MB</maxFileSize> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> </appender> <!-- 文件 滚动日志 (仅error)--> <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当前日志输出路径、文件名 --> <file>${log.path}/error.log</file> <!--日志输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!--历史日志归档策略--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 历史日志: 归档文件名 --> <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!--单个文件的最大大小--> <maxFileSize>64MB</maxFileSize> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文档只记录error级别的 level过滤器--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 文件 异步日志(async) --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender" immediateFlush="false" neverBlock="true"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <queueSize>1024</queueSize> <neverBlock>true</neverBlock> <!-- 添加附加的appender,最多只能添加一个 --> <appender-ref ref="allLog" /> </appender> <!--输出到logstash的appender--> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!--可以访问的logstash日志收集端口--> <destination>192.168.11.10:4560</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <!--自定义字段,区分应用名称--> <customFields>{"appname":"logdemo"}</customFields> </encoder> </appender> <!-- root 级别的配置 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <!--<appender-ref ref="allLog" />--> <appender-ref ref="ASYNC"/> <appender-ref ref="errorLog" /> <appender-ref ref="logstash" /> </root> <!--可输出mapper层sql语句等--> <logger name="com.tingcream" level="debug"> </logger> <!--输出jdbc 事务相关信息--> <logger name="org.springframework.jdbc" level="debug"> </logger></configuration> |
其中的关键配置是:
<!--输出到logstash的appender-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>192.168.11.10:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<!--自定义字段,区分应用名称-->
<customFields>{"appname":"logdemo"}</customFields>
</encoder>
</appender>
<!-- root 级别的配置 -->
<root level="INFO">
<appender-ref ref="logstash" />
</root>
3、Centos中安装logstash工具
tar -zxvf logstash-6.8.10.tar.gz -C /usr/local/
cd /usr/local/
mv logstash-6.8.10 logstash #重命名
收集springboot项目中的日志
cd /usr/local/logstash && mkdir conf.d
cd conf.d
vi 1.springboot-es-log.conf,内容如下
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "192.168.11.10:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
bin/logstash -f conf.d # 启动logstash
4、启动springboot项目,访问首页,浏览器访问kibana或es head图形界面
Kibana 界面:

es head界面 :


浙公网安备 33010602011771号