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的输出格式,线上与测试环境日志一片雪白,有时晚上上线盯着日志看着那是头昏眼花,多的不说
直接上图
这个是调优前的日志输出
这个是调优后的日志输出
用不同的颜色着色不同的日志,既降低的视觉疲劳感,也提高了排查问题速度,看起来非常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:<appender-ref ref="stdout"/>
这个部署线上环境时候切记要注释掉!
这个部署线上环境时候切记要注释掉!
这个部署线上环境时候切记要注释掉!
重要的事情说三遍;不然服务器炸了别怪我没提醒 ~.~
error_file:捕获异常日志,将error日志进行单独输出至error.log文件中,方便日常维护时快速查看系统是否出现异常此处我将日志输出格式与输出目录单独定义成变量形式,以便统一样式,如果有特殊需求可以自行更改当然
CONSOLE_LOG_PATTERN标签大家可以参照几种颜色自定义组合,截图上是我觉得看起来还不错的一种组合,如果觉得
颜色不够的话那我也没办法了,我去源码里面找的时候只找到了logback支持这几种颜色的代号,注释上已给出;如果各位彪悍,
可以自行挖掘其他颜色(0 . 0);我就不捣鼓了
使用方法简单,直接复制xml文件替换logback.xml文件,然后添加maven依赖即可。
纯手打;转载声明出处~