高小强的汽车暴晒场 2018-01-25
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
关于这块的配置说明,我就简单的列举一些比较常用配置来进行说明。如果还想了解更多,请看官方的文档说明。
简单的层级结构,实际有更多,仅供参考。
configuration root logger property appender layout rollingPolicy Pattern fileNamePattern maxFileSize maxHistory totalSizeCap
那么我们要使用这个的话,可以进行如下配置:
<configuration scan="true" scanPeriod="30 seconds" debug="true"> ... </configuration>
说明:root 指定的日志级别就是用类进行输出的日志,例如:
private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
logger 指定的日志级别是自定义的级别,例如:
private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
他们的用法如下:
<logger name="oneInfo" level="DEBUG" additivity="false"> <appender-ref ref="ONE_INFO" /> </logger> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE" /> </root>
说明二: level 是日志输出的级别,additivity表示是否在控制台打印该日志。
用法如下:
<property name="LOG_HOME" value="logs/pcm"/>
说明:value指定的文件路径,会在项目同级目录下自动生成,无需手动创建。
这个非常重要,也可以说是logback的核心吧。简单的用法如下:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> </appender>
说明:定义一个STDOUT名称,在控制台进行输出。
简单的用法如下:
<layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n </Pattern> </layout>
说明:Pattern里面格式的%d表示输出的时间格式,%thread 表示输出的线程名称,%-5level 表示字符宽度,%msg 表示输出的信息,%n表示换行。
简单的用法如下:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>31</maxHistory> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> </appender>
说明:这段的配置意义是,每天产生一个日志文件,如果超出了10M,日志就进行切割,并且在日志文件名称上加一,日志文件最多保持31天,日志文件总共最大为10G。
在对logback日志的配置文件进行了简单的说明之后,那我们来简单的使用logback吧。
logback.xml 使用需要依赖三个 jar 包,分别是 slf4j-api,logback-core,logback-classic。
mavan配置如下:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency>
成功在maven添加依赖包之后,我们写个简单的demo来测试下吧。
定义三个log日志,一个主log,两个自定义log。
整体配置如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds" debug="true"> <property name="LOG_HOME" value="logs/pcm"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n </Pattern> </layout> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>31</maxHistory> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n </Pattern> </layout> </appender> <appender name="ONE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${LOG_HOME}/oneInfo/%d{yyyy-MM-dd}/oneInfo.%i.txt</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>31</maxHistory> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n </Pattern> </layout> </appender> <appender name="TWO_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${LOG_HOME}/twoInfo/%d{yyyy-MM-dd}/twoInfo.%i.txt</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>31</maxHistory> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n </Pattern> </layout> </appender> <logger name="oneInfo" level="DEBUG" additivity="false"> <appender-ref ref="ONE_INFO" /> </logger> <logger name="twoInfo" level="WARN" additivity="true"> <appender-ref ref="TWO_INFO" /> </logger> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE" /> </root> </configuration>
然后分别在控制台输出和文件中进行输出。
该java的代码示例如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * Title: logbackTest * Description: * logback日志测试 * Version:1.0.0 * @author pancm * @date 2018年1月24日 */ public class logbackTest { private static Logger LOG = LoggerFactory.getLogger(logbackTest.class); private static Logger LOG2 = LoggerFactory.getLogger("oneInfo"); private static Logger LOG3 = LoggerFactory.getLogger("twoInfo"); public static void main(String[] args) { test(); } private static void test(){ LOG.debug("主程序的debug"); LOG.info("主程序的info"); LOG.warn("主程序的warn"); LOG.error("主程序的error"); LOG2.debug("oneInfo的debug"); LOG2.info("oneInfo的info"); LOG2.warn("oneInfo的warn"); LOG2.error("oneInfo的error"); LOG3.debug("twoInfo的debug"); LOG3.info("twoInfo的info"); LOG3.warn("twoInfo的warn"); LOG3.error("twoInfo的error"); }
输出结果如下:
日志的生成目录:
输出结果的说明:
参考:
https://logback.qos.ch/documentation.html
https://www.cnblogs.com/warking/p/5710303.html
到此,本文的logback日志简单讲解结束,谢谢阅读!