我正在阅读 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>
Run Code Online (Sandbox Code Playgroud)
双$$符号是什么意思?例如 $${sd:type}?
似乎$被用作转义字符。如Log4J 文档中所述,Log4j 配置文件解析器使用Apache Commons Lang 的StrSubstitutor,并且该文档中StrSubstitutor说:
另一种可能性是使用转义字符,默认情况下为“$”。如果此字符位于变量引用之前,则此引用将被忽略且不会被替换。例如:
The variable $${${name}} must be used.
我猜他们想将值设置为"${sd:type}"以便稍后可以在运行时评估此变量。这里有一个很好的例子/解释:http : //logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup