【问题标题】:log4j2 double dollar $$ sign meaning in configurationlog4j2双美元$$符号在配置中的含义
【发布时间】:2016-09-08 14:18:48
【问题描述】:

我正在阅读 Log4j2 的配置部分。 http://logging.apache.org/log4j/2.x/manual/configuration.html

<Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <List name="List">
      <ThresholdFilter level="debug"/>
    </List>
    <Routing name="Routing">
      <Routes pattern="$${sd:type}">
        <Route>
          <RollingFile name="Rolling-${sd:type}" fileName="${filename}"
                       filePattern="target/rolling1/test1-${sd:type}.%i.log.gz">
            <PatternLayout>
              <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <SizeBasedTriggeringPolicy size="500" />
          </RollingFile>
        </Route>
        <Route ref="STDOUT" key="Audit"/>
        <Route ref="List" key="Service"/>
      </Routes>
    </Routing>
  </Appenders>

双$$符号是什么意思?例如$${sd:type}?

【问题讨论】:

    标签: java log4j2


    【解决方案1】:

    似乎$ 被用作转义字符。正如Log4J documentation 中所述,Log4j 配置文件解析器使用Apache Commons Lang's StrSubstitutor,而StrSubstitutor 的此文档说:

    另一种可能性是使用转义字符,默认为'$'。 如果此字符放在变量引用之前,则此 参考被忽略,不会被替换。例如:

    The variable $${${name}} must be used.

    我猜他们想将该值设置为"${sd:type}",以便稍后可以在运行时评估此变量。这里有一个很好的例子/解释:http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup

    【讨论】:

    【解决方案2】:

    您可以像这样设置配置元素的属性 status="DEBUG":

    <Configuration status="DEBUG">  
    <properties>
            <property name="LOG_HOME">logs</property>
    </properties>
    

    然后按照两步记录日志:

    第 1 步:

    设置 filePattern="${LOG_HOME}/${date:yyyy-MM}/all-%d{yyyy-MM-dd}.log.gz"

    日志记录:
    ...
    filePattern="logs/2021-06/all-%d{yyyy-MM-dd}.log.gz"
    ...

    第 2 步:

    设置 filePattern="${LOG_HOME}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}.log.gz"
    p>

    日志记录:
    ...
    filePattern="logs/${date:yyyy-MM}/all-%d{yyyy-MM-dd}.log.gz"
    ...

    总结:

    现在你知道它们的区别了。双$表示结果将根据后面的上下文动态计算。它是动态计算的占位符。

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 2010-11-30
      • 2012-02-10
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多