logback+slf4j实现日志记录

来源:互联网 发布:淘宝手机配件店铺名字 编辑:程序博客网 时间:2024/06/05 17:46
LogBack
  1. 官方文档:http://logback.qos.ch/documentation.html
  2. logback的配置
    1. 如果没有配置文件logback-test.xml或logback.xml,logback默认调用BasicConfigurator,创建一个最小化配置。该最小化配置由一个关联到根logger的ConsoleAppender组成。输出用模式为%d{HH:mm:ss:SSS}[%thread]%-5level-%logger{36}  -%msg%n的PatternLayoutEncoder进行格式化。root logger默认级别是DEBUG。
    2. logback的配置文件:基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。
    3. logback默认配置的步骤:
      1. 尝试在classpath下查找文件logback-test.xml;
      2. 如果文件不存在,查找文件logback.xml;
      3. 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,记录输出到控制台。
  3. logback.xml文件格式
    1. 根节点<configuration>,包含三个属性:
      1. scan:此属性为true时,配置文件如果发生改变,将会被重新加载,默认值为true;
      2. scanPeriod:设置监测配置文件是否有修改的时间间隔,时间单位默认是毫秒。当scan为true时,此属性生效。默认时间为一分钟;
      3. debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认为false。
    2. 子节点<contextName>,设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。用于区别不同应用程序的记录。一旦设置,不能修改。
    3. 子节点<property>:定义变量值,属性包括name和value,通过<property>定义的值会被插入到logger上下文中,使用${}使用变量。
    4. 子节点<timestamp>:截获时间戳字符串,属性key和datePattern。key标识此<timestamp>的名字;darePattern将当前时间转换为字符串的模式。遵循java.text.SimpleDateFormat的格式。
    5. 子节点<appender>:属性name和class。name指定appender名称,class指定appender的全限定名:
      1. ConsoleAppender把日志输出到控制台,子节点包括:
        1. <encoder>:对记录日志进行格式化
        2. <target>:
      2. FileAppender:把日志添加到文件,子节点包括:
        1. <file>:被写入的文件名,可以是相对值,也可以是绝对值,如果上层目录不存在会自动创建,没有默认值;
        2. <appender>:如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true;
        3. <encoder>:对记录事件进行格式化
        4. <prudent>:如果是true,日志会被安全地写入文件,即使其他的FileAppender也向此文件做写入操作,效率低,默认为false。
      3. RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。子节点包括:
        1. <file>:被写入的文件名,同上;
        2. <appender>:同上;
        3. <rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类;
          1. class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy":最常用的滚动策略,根据时间来制定滚动策略,子节点:
            1. <fileNamePattern>:必要节点,包含文件名及“%d"转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如%d{yyyy-MM};
            2. <maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。
          2. class=“ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy",子节点:
            1. <maxFileSize>,默认值为10MB
          3. class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy",子节点:
            1. <minIndex>
            2. <maxIndex>
            3. <fileNamePattern>
        4. <encoder>:对记录事件进行格式化,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。PatternLayoutEncoder是唯一有用的且默认的encoder,有一个<pattern>节点,用于设置日志的输出格式。使用%加转换符方式。
      4. SocketAppender、SMTAppender、DBAppender、SyslogAppender、SiftingAppender
    6. 子节点<logger>:用来设置某一个包或具体的类的日志打印级别、以及指定<appender>。<logger>有name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger;
      1. name:用来指定受此logger约束的某一个包或者具体的某一个类;
      2. level:打印级别:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF。INHERITED或NULL表示强制执行上级的级别。如果没有该属性,logger会继承上级的级别;
      3. addtivity:是否向上级logger传递打印信息。默认为true。可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
    7. 字节点<root>:是一个logger元素,是根logger,所有<logger>的上级。只有level属性。name为root,默认值为DEBUG。


SLF4J

它不是一个真正的日志实现,是一个抽象层,运行后台使用任意一个日志类库,只需要更换依赖包和配置文件。


LogBack + slf4j

  1. 依赖:
    1.         <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>


  2. logback.xml
    1. <?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>


  3. java代码: 
    1. 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");}}







原创粉丝点击