一、SpringBoot日志框架
默认使用
不推荐使用System.out.println()方式来输出的原因,一是输出到文件,二是采用异步多线程方式提高吞吐率。
SpringBoot使用Apache开源项目Commons Logging作为内部日志框架,默认集成了Logback,同时也提供Log4J等流行的日志实现。
日志分为5个级别:
- ERROR,错误信息
- WARN,警告信息
- INFO,一般信息
- DEBUG,调试信息
- TRACE,跟踪信息
Logging插件默认输出到INFO级别。可通过如下配置进行修改
1 | logging.level.root= ERROR |
Logging插件无法关闭控制台中的输出。
集成Log4J日志框架
1、Maven配置
1 | <dependency> |
2、resources/log4j2.xml
1 |
|
二、docker容器外输出
1、直接通过Docker数据卷方式挂在
1 | $ docker run -v ~/logs:~/logs *** |
2、Docker容器日志
docker logs会监控容器操作系统的标准输出设备STDOUT,有数据时会传输到另一个“设备”(日志驱动)中。
1 | $ docker info | grep "Logging Driver" |
Docker的日志驱动类型:
- none,不输出日志。
- json-file (默认),以JSON格式写入文件中。
- syslog,输出日志写入宿主机的Syslog中。
- …
docker启动时设定日志驱动类型如下:
1 | $ docker run -d -p 80:80 --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 --name nginx1 nginx |
Syslog
Syslog为Linux的默认日志系统,默认安装了Rsyslog软件包。
1 | $ rsyslogd -v #查看安装信息 |
三、日志中心ELK
许多日志分析工具都可以从Syslog中获取日志,如流行的Elastic公司的ELK日志中心。『官网地址传送门』
- 日志收集:Logstash
- 日志存储:Elasticsearch
- 日志查询:Kibana
日志存储Elasticssearch
是一个可高度扩展的开源全文搜索与分析引擎,基于开源搜索引擎Lucene,提供REST API和集群能力。
集群环境中,设置节点(Node)、分片(Shards)和副本(Replicas)的数量。
docker命令如下
1 | $ docker run -d -p 9200:9200 --name elasticsearch1 elasticsearch:6.4.1 |
通过下列API接口进行操作
1 | GET http://localhost:9200 |
日志收集Logstash
Logstash提供了三个内部组件,分别是输入组件、过滤组件和输出组件,每个组件都提供了插件机制。
1、输入组件
- file,文本文件
- syslog,读取Rsyslog
- redis,读取Redis消息队列
- beats,处理filebeat事件
- …『更多请查看官方』
2、过滤组件
- grok,解析日志文本
- mutate,修改事件字段
- drop,删除事件
- clone,复制事件
- geoip,添加ip地理位置
- …『更多请查看官方』
3、输出组件
- elasticsearch,写入Elasticsearch
- file,写入文件
- graphite,写入Graphite
- statsd,写入Statsd
- …『更多请查看官方』
4、编解码插件
- json,编解码为JSON格式
- multiline,合并多行文本
docker安装:
1 | $ docker run -it --rm logstash -e 'input { stdin { } } output { stdout { } }' |
同时,可以进行如下设置:
1 | #输入时增加两字段field1和field2 |
日志查询Kibana
1 | $ docker run --rm --name kibana1 -p 5601:5601 --link elasticsearch1:elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana:6.4.1 |
ELK日志中心
- 1、需要先启动Elasticsearch的日志存储系统
- 2、再启动Rsyslog服务和Logstash容器来收集日志到Elasticsearch
- 3、最后启动Kibana容器从Elasticsearch查询日志
- 4、启动nginx容器来生产日志,然后查看Kibana页面
如几个docker配置起来很费劲,可以直接使用第三方ELK的docker。
1 | $ sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk |