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界面 :