springboot中使用logback将日志写入到ELK平台
原文:http://www.tingcream.com/blogArticle/detail/b9ab76ffaeb547388522c9b982e6f419ELK 是由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界面 :
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back 此页面的语言为中文(简体) 翻译为
- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语