zoukankan      html  css  js  c++  java
  • PatternLayoutEncoder 输出格式

    ch.qos.logback.classic.encoder.PatternLayoutEncoder

    ch.qos.logback.classic.PatternLayout
    ch.qos.logback.core.pattern.PatternLayoutBase
     
    PatternLayoutBase.class 代码片段,入口
    public void start() {
        if(pattern == null || pattern.length() == 0) {
          addError("Empty or null pattern.");
          return;
        }
        try { 
          Parser<E> p = new Parser<E>(pattern);
          if (getContext() != null) {
            p.setContext(getContext());
          }
          Node t = p.parse();
          this.head = p.compile(t, getEffectiveConverterMap());
          if (postCompileProcessor != null) {
            postCompileProcessor.process(head);
          }
          ConverterUtil.setContextForConverters(getContext(), head);
          ConverterUtil.startConverters(this.head);
          super.start();
        } catch (ScanException sce) {
          StatusManager sm = getContext().getStatusManager();
          sm.add(new ErrorStatus("Failed to parse pattern "" + getPattern()
              + "".", this, sce));
        }
      }

    <pattern> </pattern> 内容结构

    ... + Token.PERCENT + Token.FORMAT_MODIFIER + Token.SIMPLE_KEYWORD + Token.OPTION + ...

    例如:
    %-5level
    %logger{36}

    ... 代表 任意多个Token.LITERAL 或者 自身

    oken.PERCENT 是 %
    Token.FORMAT_MODIFIER 必须是数字,正数代表当前位置(即文本左侧)填充空格,负数代表当前位置相反方向填充空格,数值代表“填充空格至N个字符”,字符串本身长度大于等于N时,不需要填充。

    Token.SIMPLE_KEYWORD 是PatternLayout 中定义的字符(对应各自的Converter类)

    Token.OPTION 是由第一个“{”开启,第一个“}”结束,例如:
    %logger{36}} 中的第二个“}”视为 Token.LITERAL 普通文本
    传递多个参数用英文“,”分割,例如:
    {opt1,opt2}

    Converter 详解

    http://logback.qos.ch/manual/layouts.html#conversionWord

    1. d/date

    DateConverter.class

    %date{}                                  yyyy-MM-dd HH:mm:ss,SSS

    %date{ISO8601}                      yyyy-MM-dd HH:mm:ss,SSS

    %date{SimpleDateFormat}         SimpleDateFormat

    2. r/relative

    3. level/le/p

    级别名称 TRACE  DEBUG  INFO  WARN  ERROR

    4. t/thread

    线程名称

    Thread.currentThread().getName();

    5. lo/logger/c

    loggerName

    Logger org.slf4j.LoggerFactory.getLogger(Class clazz)
    clazz的全限定名称
    例如:cn.zno.SomeClazz

    6. m/msg/message

    FormattedMessage
    void org.slf4j.Logger.trace(String format, Object... arguments)
    由{} 开启参数,有Object[] 设置参数
    例如:
            String s = "sdfsdf";
            int i = 111;
            double d = 22.0;
            Date date = new Date();
            logger.trace("It is trace{}&{}&{}&{}",s,i,d,date);

    打印:

    It is tracesdfsdf&111&22.0&Wed Sep 09 09:35:55 CST 2015 

    7. C/class

    logger 位于的类名

    8. M/method

    打印本次log的直接方法名

    9. L/line

    new Throwable().getStackTrace()[1].getLineNumber();

    logger调用打印方法的位置(.java文件中)

    10.F/file

    该logger位于哪个.java文件

    11. X/mdc

    Mapped Diagnostic Contexts (MDC)

    映射 诊断 上下文

    12. 等等

  • 相关阅读:
    Baskets of Gold Coins_暴力
    Inversion_树状数组***
    萌新的旅行-
    KI的斐波那契_DFS
    牛吃草_二分法
    See you~_树状数组
    Bellovin_树状数组
    Bubble Sort_树状数组
    [Python] numpy.ndarray.shape
    [Python] numpy.sum
  • 原文地址:https://www.cnblogs.com/zno2/p/4792636.html
Copyright © 2011-2022 走看看