本篇文章主要介绍使用Spring Boot整合log4j,配合ELK(Elasticsearch , Logstash, Kibana)整合Kafka完成日志收集,应用场景比较多的是分布式项目,这样可以直接收集各个节点的日志到一起,便于错误日志查看和分析业务。
整个流程如下:
使用log4j的appender发送数据到kafka到topic,topic再发送到logstash,然后经过elasticsearch分析处理后到kibana页面做查询展示。
环境准备:
1、安装ELK
2、安装kafka
3、Spring Boot项目demo
简要步骤:
①、修改logj配置文件
②、加入日志打印代码
③、启动项目访问页面
④、使用kafka查看消费者打印
⑤、使用kibana建立日志索引
⑥、使用kibana查询日志、es语法查询
详细步骤:
一、修改logj配置文件
注:本项目demo是基于之前到Spring Boot入门教程的一个整合JPA 和 Thymeleaf示例。
Spring Boot2.0系列教程之 JPA 和 Thymeleaf 实践(五):Spring Boot2.0系列教程之 JPA 和 Thymeleaf 实践(五)
配置文件logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<springProperty scope="context" name="LOG_HOME" source="logback.file.path" defaultValue="E:\a_hadoop\All_logs"/>
<springProperty scope="context" name="LOG_LEVEL" source="logback.level" defaultValue="info"/>
<springProperty scope="context" name="SERVER_NAME" source="spring.application.name" defaultValue="boot_demo"/>
<!--<property name="LOG_HOME" value="D:/application/logs/enett" />-->
<!--<property name="LOG_HOME" value="/Users/ailk/test/ysl" />-->
<property name="SEF_Level" value="INFO" />
<!--文件输出的格式设置 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件输出的日志 的格式 -->
<encoder>
<pattern>
${SERVER_NAME} ${NODE_FLAG} %level %date{yyyy-MM-dd HH:mm:ss.SSS} %logger[%line] %msg%n
</pattern>
</encoder>
<!-- 配置日志所生成的目录以及生成文件名的规则 在logs/mylog-2016-10-31.0.log -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${SERVER_NAME}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 最大64MB 超过最大值,会重新建一个文件-->
<maxFileSize>10 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--控制台输出的格式设置 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制台输出的日志 的格式 -->
<encoder>
<pattern>
${SERVER_NAME} ${NODE_FLAG} %level %date{yyyy-MM-dd HH:mm:ss.SSS} %logger[%line] %msg%n
</pattern>
</encoder>
<!-- 只是DEBUG级别以上的日志才显示 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
操作日志
<appender name="DruidLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件输出的日志 的格式 -->
<encoder>
<pattern>
${SERVER_NAME} ${NODE_FLAG} %level %date{yyyy-MM-dd HH:mm:ss.SSS} %logger[%line] %msg%n
</pattern>
</encoder>
<!-- 配置日志所生成的目录以及生成文件名的规则 在logs/mylog-2016-10-31.0.log -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${SERVER_NAME}/Druid/DruidLog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.cor