LogBack
- 官方文档:http://logback.qos.ch/documentation.html
- logback的配置
- 如果没有配置文件logback-test.xml或logback.xml,logback默认调用BasicConfigurator,创建一个最小化配置。该最小化配置由一个关联到根logger的ConsoleAppender组成。输出用模式为%d{HH:mm:ss:SSS}[%thread]%-5level-%logger{36} -%msg%n的PatternLayoutEncoder进行格式化。root logger默认级别是DEBUG。
- logback的配置文件:基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。
- logback默认配置的步骤:
- 尝试在classpath下查找文件logback-test.xml;
- 如果文件不存在,查找文件logback.xml;
- 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,记录输出到控制台。
- logback.xml文件格式
- 根节点<configuration>,包含三个属性:
- scan:此属性为true时,配置文件如果发生改变,将会被重新加载,默认值为true;
- scanPeriod:设置监测配置文件是否有修改的时间间隔,时间单位默认是毫秒。当scan为true时,此属性生效。默认时间为一分钟;
- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认为false。
- 子节点<contextName>,设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。用于区别不同应用程序的记录。一旦设置,不能修改。
- 子节点<property>:定义变量值,属性包括name和value,通过<property>定义的值会被插入到logger上下文中,使用${}使用变量。
- 子节点<timestamp>:截获时间戳字符串,属性key和datePattern。key标识此<timestamp>的名字;darePattern将当前时间转换为字符串的模式。遵循java.text.SimpleDateFormat的格式。
- 子节点<appender>:属性name和class。name指定appender名称,class指定appender的全限定名:
- ConsoleAppender把日志输出到控制台,子节点包括:
- <encoder>:对记录日志进行格式化
- <target>:
- FileAppender:把日志添加到文件,子节点包括:
- <file>:被写入的文件名,可以是相对值,也可以是绝对值,如果上层目录不存在会自动创建,没有默认值;
- <appender>:如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true;
- <encoder>:对记录事件进行格式化
- <prudent>:如果是true,日志会被安全地写入文件,即使其他的FileAppender也向此文件做写入操作,效率低,默认为false。
- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。子节点包括:
- <file>:被写入的文件名,同上;
- <appender>:同上;
- <rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类;
- class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy":最常用的滚动策略,根据时间来制定滚动策略,子节点:
- <fileNamePattern>:必要节点,包含文件名及“%d"转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如%d{yyyy-MM};
- <maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。
- class=“ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy",子节点:
- <maxFileSize>,默认值为10MB
- class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy",子节点:
- <minIndex>
- <maxIndex>
- <fileNamePattern>
- class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy":最常用的滚动策略,根据时间来制定滚动策略,子节点:
- <encoder>:对记录事件进行格式化,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。PatternLayoutEncoder是唯一有用的且默认的encoder,有一个<pattern>节点,用于设置日志的输出格式。使用%加转换符方式。
- SocketAppender、SMTAppender、DBAppender、SyslogAppender、SiftingAppender
- ConsoleAppender把日志输出到控制台,子节点包括:
- 子节点<logger>:用来设置某一个包或具体的类的日志打印级别、以及指定<appender>。<logger>有name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger;
- name:用来指定受此logger约束的某一个包或者具体的某一个类;
- level:打印级别:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF。INHERITED或NULL表示强制执行上级的级别。如果没有该属性,logger会继承上级的级别;
- addtivity:是否向上级logger传递打印信息。默认为true。可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
- 字节点<root>:是一个logger元素,是根logger,所有<logger>的上级。只有level属性。name为root,默认值为DEBUG。
- 根节点<configuration>,包含三个属性:
SLF4J
它不是一个真正的日志实现,是一个抽象层,运行后台使用任意一个日志类库,只需要更换依赖包和配置文件。
LogBack + slf4j
- 依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</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>
- logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy/MM/dd-HH:mm:ss.SSS} %level [%thread] %class:%line>>%msg%n</pattern> </encoder > </appender> <appender name="file" class="ch.qos.logback.core.FileAppender"> <!--<file>D:/logs/dis.log</file>--> <file>/home/work/monkey_dispatcher/tomcat/logs/dispatcher.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/home/work/monkey_dispatcher/tomcat/logs/</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <!--<logger name="com.controller" level="INFO"></logger>--> <root level="debug"> <appender-ref ref="stdout" /> <appender-ref ref="file" /> <appender-ref ref="rollingFile" /> </root> </configuration>
- java代码:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogbackDemo { private static Logger log = LoggerFactory.getLogger(LogbackDemo.class); public static void main(String[] args) { log.trace("trace"); log.debug("debug"); log.info("info"); log.warn("warn"); log.error("error"); } }