Java日志记录框架Logback详解(5)

目前PatternLayoutEncoder是唯一有用的且默认的encoder,有一个<pattern>节点,就像上面演示的,用来设置日志的输入格式,使用“%+转换符"的方式,如果要输出"%"则必须使用"\%"对"%"进行转义。

<encoder>的一些可用参数用表格表示一下:

转换符   作  用   是否避免使用  

c{length}

lo{length}

logger{length}

 

输出日志的logger名称,可有一个整型参数来缩短<logger>名称,有几种情况:

1、不输入表示输出完整的<logger>名称

2、输入0表示只输出<logger>最右边点号之后的字符串

3、输入其他数字表示输出小数点最后边点号之前的字符数量

 

 

C{length}

class{length}

  输出指定记录的请求的调用者的全限定名,length同上    

d{pattern}

date{pattern}

  输出时间格式,模式语法同java.text.SimpleDateFormat兼容    
caller{depth}   输出生成日志的调用者的位置信息,整数选项表示输出信息深度    
L   输出执行日志的请求行号    

m

msg

message

  输出应用程序提供的信息    
m   输入执行日志请求的方法名    
n   输出平台相关的分行符"\n"或者"\r\n",即换行    

p

le

level

  输出日志级别    

r

relative

  输出从程序启动到创建日志记录的时间,单位为毫秒    

t

thread

  输出产生日志的线程名称    

看到最后一列是"是否避免使用",这是因为这些信息是无法直接拿到的(比如请求行号、调用方法名),logback必须通过一些特殊手段去获取这些数据(比如在日志打印出产生一个堆栈信息),这种操作会比较影响效率,因此除非必要,否则不建议打印这些数据。

Filter

最后来看一下<filter>,<filter>是<appender>的一个子节点,表示在当前给到的日志级别下再进行一次过滤,最基本的Filter有ch.qos.logback.classic.filter.LevelFilter和ch.qos.logback.classic.filter.ThresholdFilter,首先看一下LevelFilter:

<configuration scan="false" scanPeriod="60000" debug="false">

<appender>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
        <filter>
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
   
    <logger additivity="false" />
    <logger level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>
   
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
   
</configuration>

看一下输出:

2018-03-31 22:22:58.843 [main] WARN  java.lang.Object - =====warn=====

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8e687584a611807a04e52a0779e5ff97.html