logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装。
官方地址为:http://logback.qos.ch/
下面对logback日志提供日志优化与日志分离技术的详细描述与干货分享~
首先logback日志需要依赖一下jar包:
<properties>
<slf4j.version>1.7.21</slf4j.version>
<logback.version>1.0.13</logback.version>
<lombok.version>1.14.4</lombok.version>
</properties>
<!-- 日志文件管理包 -->
<!-- ==========================log start========================== -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- ==========================log end========================== -->
主配置文件为logback.xml,放在src目录下或是WEB-INF/classes下,logback会自动加载
之前一直没调试过logback的输出格式,线上与测试环境日志一片雪白,有时晚上上线盯着日志看着那是头昏眼花,多的不说
直接上图
这个是调优前的日志输出
这个是调优后的日志输出
![](https://i-blog.csdnimg.cn/blog_migrate/47f09764ac33c41625f4aad9ec77058f.png)
看起来是不是爽多了~
用不同的颜色着色不同的日志,既降低的视觉疲劳感,也提高了排查问题速度,看起来非常nice;通宵狗与强迫症的首选
废话不多说直接上干货!
下面是logback.xml文件的全部配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- magenta:洋红 -->
<!-- boldMagenta:粗红-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋红 -->
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
<property name="FILE_PATH"
value="/root/sys/logs/member"/>
<!--==================写入文件==================-->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${FILE_PATH}/log/aurora-member.log</File>
<encoder>
<!-- <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${FILE_PATH}/log/aurora-member-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--==================写入文件==================-->
<!--==================异常日志==================-->
<appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${FILE_PATH}/member-error/member-error.log</file>
<!-- 只打印错误日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${FILE_PATH}/member-error/member-error-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<maxHistory>30</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--==================异常日志==================-->
<!--==================控制台==================-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--==================控制台==================-->
<logger name="com.ibatis" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<logger name="java.sql.PreparedStatement" level="INFO"/>
<logger name="org.springframework.web.servlet.DispatcherServlet" level="INFO"/>
<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="INFO"/>
<logger name="java.sql" level="INFO"/>
<logger name="org.apache.commons" level="INFO"/>
<logger name="java.sql.Statement" level="INFO"/>
<logger name="org.springframework.web.context.support.XmlWebApplicationContext" level="INFO"/>
<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="INFO"/>
<logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" level="INFO"/>
<logger name="java.sql.ResultSet" level="INFO"/>
<logger name="java.sql.Connection" level="INFO"/>
<logger name="com.ibatis.common.jdbc.ScriptRunner" level="INFO"/>
<root level="DEBUG">
<appender-ref ref="logfile"/>
<appender-ref ref="stdout"/>
<appender-ref ref="error_file" />
</root>
</configuration>
此logback.xml文件既有成彩色输出也有日志级别的分类,不同级别的日志进行分类输出;error日志单独输出一份至一个文件夹中,设置滚动策略与info日志保持一致时间滚动策越+单个文件最大滚动策略,如果对日志滚动备份不太清楚的话可以去官网上看一看,上面有详细的说明文档;
logfile:输出与日志文件中
stdout:输出到控制台;本地调试时可以开启此输出;方便本地调试与排查问题(ps:)
ps:输出到控制台-服务器上输出到日志文件中,所以要注释掉,否则tail log时会产生两份日志等及其他问题。最好注释掉
<appender-ref ref="stdout"/>
这个部署线上环境时候切记要注释掉!
这个部署线上环境时候切记要注释掉!
这个部署线上环境时候切记要注释掉!
重要的事情说三遍。
error_file:捕获异常日志,将error日志进行单独输出至error.log文件中,方便日常维护时快速查看系统是否出现异常
此处我将日志输出格式与输出目录单独定义成变量形式,以便统一样式,如果有特殊需求可以自行更改
当然
CONSOLE_LOG_PATTERN标签大家可以参照几种颜色自定义组合,截图上是我觉得看起来还不错的一种组合,如果觉得
颜色不够的话那我也没办法了,我去源码里面找的时候只找到了logback支持这几种颜色的代号,注释上已给出;如果各位彪悍,
可以自行挖掘其他颜色(0 . 0);我就不捣鼓了
使用方法简单,直接复制xml文件替换logback.xml文件,然后添加maven依赖即可。
纯手打;转载声明出处~