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

时间:2016-09-08 14:18:48

标签: java log4j2

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

double $$ sign是什么意思?例如$$ {SD:类型}

2 个答案:

答案 0 :(得分:4)

似乎input_modal.find('.modal-body').html('Analysis complete'+response.console_output) 用作转义字符。如Log4J documentation中所述,Log4j配置文件解析器使用Apache Commons Lang's StrSubstitutor/// Save NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(object), forKey: key) /// Read var data = NSUserDefaults.standardUserDefaults().objectForKey(key) as NSData var object = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [String: String] 的此文档说:

  

另一种可能性是使用转义字符,默认情况下为&#39; $&#39;。   如果此字符放在变量引用之前,则为此   引用被忽略,不会被替换。例如:

     

$

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

答案 1 :(得分:0)

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

    public class MainActivity extends AppCompatActivity implements NumberPicker.OnValueChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.numberpicker);
    }

    @Override
    public void onValueChange(NumberPicker numberPicker, int i, int i1) {
        Toast.makeText(this,
                "selected number " + numberPicker.getValue(), Toast.LENGTH_SHORT).show();
    }

    public void showNumberPicker(View view){
        NumberPickerDialog newFragment = new NumberPickerDialog();
        newFragment.setValueChangeListener(this);
        newFragment.show(getSupportFragmentManager(), "time picker");
    }
}

然后按照两步记录日志:

第 1 步:

Set 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"
...

总结:

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