I am reading the configuration part of 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>
What is the meaning of double $$ sign? e.g. $${sd:type}?
Advertisement
Answer
It seems that $
is used as an escape character. As stated in Log4J documentation, Log4j configuration file parser uses Apache Commons Lang’s StrSubstitutor
, and this documentation for StrSubstitutor
says:
The other possibility is to use the escape character, by default ‘$’. If this character is placed before a variable reference, this reference is ignored and won’t be replaced. For example:
The variable $${${name}} must be used.
I guess they want to set the value to "${sd:type}"
so that this variable can be evaluated later at run-time. There is a good example/explanation here: http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup