系列文章:一、logback 的介绍 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 来访问日志的功能。 二、maven 依赖 <!-- logback+slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency> 三、配置和使用 1. 日志使用 我们使用 org.slf4j.LoggerFactory,就可以直接使用日志了。 protected final Logger logger = LoggerFactory.getLogger(this.getClass()); 2. 在控制台输出特定级别的日志 logback 的配置文件都放在 /src/main/resource/ 文件夹下的 logback.xml 文件中。其中 logback.xml 文件就是 logback 的配置文件。只要将这个文件放置好了之后,系统会自动找到这个配置文件。 下面的配置中,我们输出特定的 ERROR 级别的日志: <?xml version="1.0"?> <configuration> <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 日志级别 --> <root> <level value="error" /> <appender-ref ref="console" /> </root> </configuration> 结果只在控制台输出 ERROR 级别的日志。 3. 设置输出多个级别的日志 <?xml version="1.0"?> <configuration> <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 日志级别 --> <root> <level value="error" /> <level value="info" /> <appender-ref ref="console" /> </root> </configuration> 设置两个 level,则可以输出 ERROR 和 INFO 级别的日志了。 4. 设置文件日志 <?xml version="1.0"?> <configuration> <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n </pattern> </encoder> </appender> <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 --> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <File>/home/test.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>/home/test-%d{yyyy-MM-dd}.log </FileNamePattern> <MaxHistory>10</MaxHistory> <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>5MB</MaxFileSize> </TimeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n </pattern> </layout> </appender> <!-- 日志级别 --> <root> <!-- 定义了ERROR和INFO级别的日志,分别在FILE文件和控制台输出 --> <level value="error" /> <level value="info" /> <appender-ref ref="file" /> <appender-ref ref="console" /> </root> </configuration> 四、logback 配置详解 1. 根节点 configuration 包含的属性 <configuration scan="true" scanPeriod="60 seconds" debug="false"> </configuration> scan:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true。 scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为1分钟。 debug:当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback 运行状态。默认值为 false。 2. 根节点 configuration 的子节点 (1) 设置上下文名称:contextName 每个 logger 都关联到 logger 上下文,默认上下文名称为 default。但可以使用 contextName 设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。 <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>myAppName</contextName> <!-- 其他配置省略--> </configuration> (2) 设置变量:property 用来定义变量值的标签,property 有两个属性,name 和 value;其中 name 的值是变量的名称,value 的值是变量定义的值。通过 property 定义的值会被插入到 logger 上下文中。定义变量后,可以使 ${} 来使用变量。 例如使用 property 定义上下文名称,然后在 contentName 设置 logger 上下文时使用。 <configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="APP_Name" value="myAppName" /> <contextName>${APP_Name}</contextName> <!-- 其他配置省略--> </configuration> (3) 获取时间戳字符串:timestamp 两个属性 key:标识此 timestamp 的名字;datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循 java.txt.SimpleDateFormat的格式。 例如将解析配置文件的时间作为上下文名称: <configuration scan="true" scanPeriod="60 seconds" debug="false"> <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> <contextName>${bySecond}</contextName> <!-- 其他配置省略--> </configuration> (4) 设置loger - loger 用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 appender。loger 仅有一个 name 属性,一个可选的 level 和一个可选的 addtivity 属性。 name: 用来指定受此 loger 约束的某一个包或者具体的某一个类。 level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值 INHERITED 或者同义词 NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前 loger 将会继承上级的级别。 addtivity: 是否向上级 loger 传递打印信息。默认是 true。 loger 可以包含零个或多个 appender-ref 元素,标识这个 appender 将会添加到这个 loger。 - root 也是 loger 元素,但是它是根 loger。只有一个 level 属性,应为已经被命名为 root。 level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为 INHERITED 或者同义词 NULL。 默认是 DEBUG。 root 可以包含零个或多个 appender-ref 元素,标识这个 appender 将会添加到这个 loger。 五、替换 log4j 首先工程里不能有 log4j 的 maven 以来,其次用 logback 的包替换 log4j 的包。 <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency> <!-- logback + slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>1.7.13</version> </dependency> <!-- logback + log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> 转载请并标注: “本文转载自 linkedkeeper.com ” ©著作权归作者所有 |