当前位置: 首页 > 知识库问答 >
问题:

log4j2配置中的双美元$$符号含义

东郭阳德
2023-03-14

我正在阅读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>

双$$符号是什么意思?e、 g.$${sd:type}?

共有2个答案

连俊智
2023-03-14

您可以如下设置配置元素的属性status=“DEBUG”:

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

然后按照以下两个步骤记录日志:

Set filePattern=“${LOG\u HOME}/${date:yyyyy-MM}/all-%d{yyy-MM-dd}.LOG.gz”

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

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

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

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

郑茂材
2023-03-14

似乎$用作转义字符。正如Log4J文档中所述,Log4J配置文件解析器使用apachecommons Lang的StrSubstitutor,而StrSubstitutor的文档说明:

另一种可能是使用转义字符,默认情况下为“$”。如果将此字符放置在变量引用之前,则将忽略此引用,并且不会替换它。例如:

必须使用变量$${${name}}

我猜他们希望将该值设置为“${sd:type}”,以便稍后在运行时对该变量进行计算。这里有一个很好的例子/解释:http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup

 类似资料:
  • 问题内容: 例如,它是Jikes RVM堆栈的一部分。 “访问”应为方法名称。但是我检查了类源代码及其接口,没有所谓的“访问”方法。我在Google上找不到答案,因为Google讨厌各种标点符号。有人可以帮忙吗?非常感谢。 问题答案: 引用@birryree链接的文章: 如果一个类将另一个类包围,或者如果它们被一个公共类包围,则另一个类D可以使用C类的私有成员m。由于虚拟机不知道这种分组方式, 因

  • 问题内容: 我正在看有角度的1.2源代码,我很好奇为什么某些函数以两个美元符号开头。这是某种约定吗? 问题答案: 单个,用于保留公共标识符 保留 专用 标识符的双精度 引用文档: $前缀命名约定 … 如果您检查范围,您可能还会注意到一些以$$开头的属性。这些属性被认为是私有的,不应访问或修改。

  • 问题内容: 在Makefile中插入shell脚本时,我们可以使用双美元符号($$)来引用变量。为什么会这样? 问题答案: 按照gnu make官方文档: 配方中的变量和函数引用与makefile中其他位置的引用具有相同的语法和语义。它们也具有相同的报价规则:如果您希望在配方中出现美元符号,则必须将其加倍(’$$’)。对于使用美元符号引入变量的外壳(如默认外壳),请务必牢记要引用的变量是make变

  • 在Spring YAML配置文件中,我需要有一个参数,例如 其中< code>${app-name}在运行时被Java代码动态替换,我不希望Spring在启动时替换它。 为了实现这一点,我需要转义字符,以便Spring不会将其解释为SpEL。 以下答案在YAML不适用: > 如何逃脱EL美元符号? Spring属性文件中的转义属性引用 如果包含美元符号(${var}),则无法读取属性 我尝试了所有

  • 本文向大家介绍MyBatis中#号与美元符号的区别,包括了MyBatis中#号与美元符号的区别的使用技巧和注意事项,需要的朋友参考一下 #{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。 假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的就是'12',如果id为整型,那么id就是12,并且MyBatis会将上面SQL语句转化为jdbc的selec

  • 我已经在hive:udfrowsequence中尝试过这个UDF。 但是它不产生唯一的值,即它依赖于映射器重复序列。 假设我有一个文件(有4条记录)在HDFS中可用。它将为该作业创建一个映射器,结果将类似于 1 2 3 4 1 2 3 4 1 2 。