先附上本文分析用的例子:

 <?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="logDirfile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
../logs/java_logs/%d{yyyy-MM-dd_HH}/access.%d{yyyy-MM-dd}.log
</FileNamePattern>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} -%msg%n
</Pattern>
</layout>
</appender> <appender name="WarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>../logs/strength_logs/%d{yyyy-MM-dd_HH}/access.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</pattern>
</encoder>
</appender> <root level="info">
<appender-ref ref="logDirfile"></appender-ref>
<appender-ref ref="WarnLog"/>
</root>
</configuration>

<appender>标签:

<appender>是<configuration>的子节点,是负责写日志的组件。
​<appender>有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。

RollingFileAppender:

滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:

  • <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
  • <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
  • <encoder>:对记录事件进行格式化。
  • <rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。
  • <triggeringPolicy >: 告知 RollingFileAppender 合适激活滚动。
  • <prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

<rollingPolicy>标签:
负责指定日志分包策略

TimeBasedRollingPolicy:
最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动。有以下子节点:

  • <FileNamePattern>:
    必要节点,包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据FileNamePattern的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
  • <maxHistory>:
    可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件时,那些为了归档而创建的目录也会被删除。

例子:

 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>
<maxHistory>5</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>

分析:ch.qos.logback.core.rolling.TimeBasedRollingPolicy类实现的是基于时间的分包策略,分包间隔是根据fileNamePattern中指定的事件最小单位,比如例子中的%d{yyyy-MM-dd_HH-mm}的最小事件单位为分,它的触发方式就是1分钟,策略在每次向日志中添加新内容时触发,如果满足条件,就将mylog.txt复制到E:/logs/目录并更名为mylog-2010-06-22_13-13.1.log,并删除原mylog.txt。
maxHistory的值为指定E:/logs目录下存在的类似mylog-2010-06-22_13-13.1.log文件的最大个数,当超过时会删除最早的文件。
此外,分包策略还可以互相嵌套,比如本例中在时间策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP实现对单文件大小的判断,当超过maxFileSize中指定大大小时,文件名中的变量%i会加一,即在不满足时间触发且满足大小触发时,会生成mylog-2010-06-22_13-13.1.log和mylog-2010-06-22_13-13.2.log两个文件。


<filter>标签:
过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。
返回DENY,日志将立即被抛弃不再经过其他过滤器;
返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;
返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到<Appender> 中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender> 有多个过滤器时,按照配置顺序执行。

下面是几个常用的过滤器:

  1. LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
    <level>:设置过滤级别(INFO、WARN、ERROR)
    <onMatch>:用于配置符合过滤条件的操作
    <onMismatch>:用于配置不符合过滤条件的操作。例如:将过滤器的日志级别配置为INFO,所有INFO级别的日志交给appender处理,非INFO级别的日志,被过滤掉。
  2. ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
    例子:
     <configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 过滤掉 TRACE 和 DEBUG 级别的日志-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>INFO</level>
    </filter>
    <encoder>
    <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
    </encoder>
    </appender>
    <root level="DEBUG">
    <appender-ref ref="CONSOLE" />
    </root>
    </configuration>
  3. EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。
    例如:过滤掉所有日志消息中不包含“billing”字符串的日志:
     <configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator>
    <expression>return message.contains("billing");</expression>
    </evaluator>
    <OnMatch>ACCEPT</OnMatch>
    <OnMismatch>DENY</OnMismatch>
    </filter> <encoder>
    <pattern>%-4relative [%thread] %-5level %logger - %msg%n</pattern>
    </encoder>
    </appender> <root level="INFO">
    <appender-ref ref="STDOUT" />
    </root>
    </configuration>

    <Pattern>标签:
    例如:<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n</pattern>

    含义:%d表示日期;%thread表示线程名;%-5level:级别从左显示5个字符宽度;%msg:日志消息;%n是换行符


    <root>标签:
    例如:<root level="info"><appender-ref ref="logDirfile"></appender-ref></root>
    含义:<root level="INFO">将root的打印级别设置为“INFO”,指定了名字为“logDirfile”的appender。
    当执行logback.LogbackDemo类的main方法时,root将级别为“INFO”及大于“INFO”的日志信息交给已经配置好的名为“logDirfile”的appender处理,“logDirfile”appender将信息打印到控制台。


    初始化logback 配置文件的代码:

     public static void initLogback() throws UnknownHostException{
    try {
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    JoranConfigurator configurator = new JoranConfigurator();
    configurator.setContext(lc);
    lc.reset();
    configurator.doConfigure("src/logback.xml");
    } catch (Exception e) {
    e.printStackTrace();
    System.err.println("logback 配置初始化报错,服务器关闭。");
    System.exit(0);
    }
    }

最新文章

  1. 禁止chrome记住密码
  2. Atitit &#160;J2EE平台相关规范--39个&#160;&#160;3.J2SE平台相关规范--42个
  3. 洛谷P1141 01迷宫
  4. UI设计师零基础入门到精通精品视频教程【155课高清完整版】
  5. [SAP ABAP开发技术总结]几个小问题
  6. java新手笔记34 连接数据库
  7. 根据WSDL生成代理类方式(2)
  8. 解决从github下载web的源代码部署到eclipse的问题
  9. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
  10. 【布艺DIY】 零基础 做包包 2小时 就OK!_豆瓣
  11. HDU3045 Picnic Cows (斜率DP优化)(数形结合)
  12. Redis(三)-数据类型
  13. 获取cpu和内存使用情况
  14. 解决定位工具报错Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.
  15. Qt基础学习---滑动条之QSlider
  16. element-ui input输入框回车事件
  17. 真&#183;浅谈treap树
  18. Programming Specification
  19. SkylineGlobe 如何二次开发获取三维模型的BBOX和设置Tint属性
  20. 命令行安装kvm虚拟机、桥接网络、用virt-manager管理

热门文章

  1. java 常用的验证方法帮助类
  2. UESTC_Infected Land 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem G&gt;
  3. struct内存对齐
  4. pythonBasic
  5. Dynamic Flash Messages
  6. Riak VClock
  7. sshd安全性能优化
  8. Android 打开系统相册和系统视
  9. Android app去应用市场评分功能
  10. (转)Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds