随笔 - 22, 文章 - 0, 评论 - 1, 引用 - 0
数据加载中……

logback_doc_manual_06_layouts

http://logback.qos.ch/manual/layouts.html
PatternLayout
     转换模式类似于C语言里的printf()。
转移字符:
     c{length}
     lo{length}
     logger{length}
          其中的length代表输出的logger长度。
          设为0的话例外,仅输出最右边的logger名。
          其余情况会自动计算,尽量使得输出的总字符串长度小于指定长度——但是,最右边的logger名称无论如何会完整保留,同时前面的每一级logger,最少会被精简到1个字符。
          ——%c{1}
     C{length}
     class{length}
          打印调用者的类名称,设置方法与上面一样。
          性能不高。
     contextName
     cn
          打印logger在event最初绑定的logger context的名称。
     d{pattern}
     date{pattern}
     d{pattern, timezone}
     date{pattern, timezone}
          输入日志时间,使用java.text.SimpleDateFormat的日期格式化方法。
          如果不指定日期格式,默认使用ISO8601,也就是2006-10-20 14:06:49,812这种形式。
          ——%d
     F / file
          输出java源文件的名称。
          性能不高。
     caller{depth}
     caller{depth, evaluator-1, ... evaluator-n}
          打印日志事件的调用堆栈。
          使用评估器evaluator决定是否打印。
     L
     line
          输出日志记录请求发起的行数。
          性能不高。
     m
     msg
     message
          日志正文
          ——%m
     M
     method
          日志调用方法名。
          性能不高
     n
          操作系统对应的换行符
          ——%n
     p
     le
     level
          日志等级
     r
     relative
          应用程序启动到日志创建的相对时间
     t
     thread
          线程名
          ——%t
     X{key:-defaultVal}
     mdc{key:-defaultVal}
          MDC信息
     ex{depth} 
     exception{depth} 
     throwable{depth} 
     ex{depth, evaluator-1, ..., evaluator-n} 
     exception{depth, evaluator-1, ..., evaluator-n} 
     throwable{depth, evaluator-1, ..., evaluator-n}
          输出异常堆栈深度(如果有的话),默认full全部输出。
          可以指定的参数值:
               short:打印堆栈的第一行
               full:打印所有行
               任何数字:指定行数
          使用评估器evaluator决定是否打印。
     xEx{depth} 
     xException{depth} 
     xThrowable{depth} 
     xEx{depth, evaluator-1, ..., evaluator-n} 
     xException{depth, evaluator-1, ..., evaluator-n} 
     xThrowable{depth, evaluator-1, ..., evaluator-n}
          跟上面的类似,但是附加了包信息。
          如果包信息不准确(是猜测的),那么会自动在包信息前面附加一个“~”字符。
          如果在日志信息模式里,未指定任何异常格式,那么系统会自动在末尾加上一个%xEx。
          如果不想打印包信息(例如netbean里会出问题),那么在日志模式的末尾明确指定%ex即可,就会输出不包含包信息的堆栈。
          如果想不打印任何异常堆栈信息,可以使用%nopex。
          ——%xEx
     nopex 
     nopexception          
          加上%nopex可以阻止系统自动在日志模式末尾添加%xEx——也就是完全禁止异常堆栈打印。
     marker
          输出关联的marker信息,如果marker多级关联,会都打印出来。
     property{key}
          输出key关联的属性——定义在logger context或者system properties里面。
     replace(p){r, t}
          将p中的所有符合r正则的字符串,都替换成t。
          例如%replace(%logger%msg){'\.', '/'},会将输出的logger和msg信息中的点号都替换成斜杠。
     rEx{depth} 
     rootException{depth} 
     rEx{depth, evaluator-1, ..., evaluator-n} 
     rootException{depth, evaluator-1, ..., evaluator-n}
          类似于xEx,也会打印异常的包信息,但是会将root exception打印到前面,跟普通的异常打印顺序是反着的。
     转义百分号: \%
     正常情况下转义字符会被正确分割,但有些时候例外,例如%date%nHello,系统会解析%nHello失败。如果真的需要在%n后紧跟一个Hello,可以这样:%date%n{}Hello
     我一般用这个:
     %d [%t] %-5p  %c{1} - %m%n
------------------------------------------------------------------
Format modifiers
     控制数据段的补齐。
     例如 %20.30logger 
          如果logger长度小于20,则从左边用空格补齐;如果logger长度大于30,则从开头(左边)切去多余字符。
          如果20或者30前面有负号,则左右颠倒。
     假如想给日志级别只输出1个字符(T,D,W,I,E),不需要自己写一个Converter,而只需要配置一下即可:%.-1level
转义选项:
     如果转义选项里面包含特殊字符(特别是在使用正则表达式的时候),例如大小括号、逗号、空格,那么可以用单引号或双引号括起来,例如:
          <pattern>%-5level - %replace(%msg){'\d{14,16}', 'XXXX'}%n</pattern>
     ——这个可以把14到16位的数字(信用卡号)转换为XXXX。
------------------------------------------------------------------
括号的特殊作用:
     %-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
     可以让括号里的两个表达式联合起来按照30个字符补齐。
     括号可以用反斜杠转义:\(%d{HH:mm:ss.SSS} [%thread]\)
------------------------------------------------------------------
Coloring
     着色,window需要引其它包,linux和mac os本身支持着色。
     样例:<pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
          %highlight会将ERROR设为红色加粗,WARN设为红色,INFO设为蓝色,其余默认。
          %cyan会将logger名称设为蓝绿色。
------------------------------------------------------------------
Evaluators
     EventEvaluator类的实现,用来评估一个事件是否符合打印条件。
  <evaluator name="DISP_CALLER_EVAL">
    <expression>logger.contains("chapters.layouts") &amp;&amp; \
      message.contains("who calls thee")</expression>
  </evaluator>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder>
      <pattern>
        %-4relative [%thread] %-5level - %msg%n%caller{2, DISP_CALLER_EVAL}
      </pattern>
    </encoder>
  </appender>
     注意因为xml的关系,要用&amp;转义&
     应用场景:
          例如,如果日志级别是WARN以上,并且logger是来自一个财务模块——那么就打印caller信息。
     注意:
          在%caller转义模式中,当Evaluators返回true的时候才输出。
          在%ex转义模式中,当Evaluatorstrue的时候不输出。
     例如下面的配置,当异常对象为TestException时,不输出。
  <evaluator name="DISPLAY_EX_EVAL">
    <expression>throwable != null &amp;&amp; throwable instanceof  \
      chapters.layouts.TestException</expression>
  </evaluator>
        
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n%ex{full, DISPLAY_EX_EVAL}</pattern>
    </encoder>
  </appender>
------------------------------------------------------------------
Creating a custom conversion specifier
     略
------------------------------------------------------------------
HTMLLayout
     使用html表格来布局日志信息。
     可以使用普通的pattern转义符,但转义字符之前,不许用包括空格在内的任何字符分隔。
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.html.HTMLLayout">
        <pattern>%relative%thread%mdc%level%logger%msg</pattern>
      </layout>
    </encoder>
    <file>test.html</file>
  </appender>
     HTMLLayout会自动创建一个DefaultThrowableRenderer,将异常信息打印到完整的一行里。如果不想这样,可以指定一个NOPThrowableRenderer。
用CSS指定表格的样式:略
该Layout最常见的用法是配合SMTPAppender,发送html格式的日志邮件。
------------------------------------------------------------------
Logback access
     略

posted on 2014-07-13 18:58 王星游 阅读(665) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航: