簡體   English   中英

log4j2.xml 內部的數學運算

[英]Math operations inside log4j2.xml

我想在log4j2.xml中添加自定義模式。 在那里我需要做一些數學運算,比如日志 output 的multiplication (*)modulo(%)

例如,假設我得到 Unix 時間(以秒為單位)作為日志 output。如果我需要multiply it by 1000 ,我應該怎么做?

我嘗試了不同的方法來做到這一點。 但它將數學運算輸出為純文本。

這是我在log4j2.xml中使用的示例模式。 我在那里嘗試了不同的乘法方式。

<Console name="stdout" target="SYSTEM_OUT">
    <PatternLayout>
        <pattern>%d{UNIX} %{1000*%d{UNIX}} (%d{UNIX})*1000 1000*(%d{UNIX}) %n</pattern>
    </PatternLayout>
</Console>

它輸出純文本值。 不是乘法后的值。

1645687086 %{1000*1645687086} (1645687086)*1000 1000*(1645687086) 

那么有沒有一種方法可以讓我在 xml 標簽本身內部進行乘法運算(*)和取模運算(%)?

您的問題可能是經典的XY 問題

如果您想從 Epoch 打印以毫秒為單位的時間戳,請使用%d{UNIX_MILLIS}

另一方面,如果您正在尋找執行算術替換的PatternConverter ,則沒有。 可以在文檔中找到可用模式的列表。

然而 Log4j 2.x 具有很強的可擴展性,您可以編寫和注冊自己的模式轉換器。

編輯:要創建一個新的PatternConverter ,您可以從這樣的事情開始:

@Plugin(name = "math", category = "Converter")
@ConverterKeys({ "math" })
public class MathPatternConverter extends LogEventPatternConverter {

    private final List<PatternFormatter> patterns;

    public static MathPatternConverter newInstance(Configuration config, String[] options) {
        if (options.length < 1) {
            LOGGER.error("Incorrect number of options. Expected at least 1, received " + options.length);
            return null;
        }
        if (options[0] == null) {
            LOGGER.error("No pattern supplied.");
            return null;
        }
        final PatternParser parser = PatternLayout.createPatternParser(config);
        return new MathPatternConverter(parser.parse(options[0]));
    }

    protected MathPatternConverter(List<PatternFormatter> patterns) {
        super("math", "math");
        this.patterns = patterns;
    }

    @Override
    public void format(LogEvent event, StringBuilder toAppendTo) {
        final StringBuilder sb = new StringBuilder();
        patterns.stream().forEach(f -> f.format(event, sb));
        // sb contains a mathematical expression. You need to evaluate it.
        ... put your code here ...
    }
}

並將其用作%math{10 + 20} 要使用 Log4j 2.x 注冊此插件,請按照插件文檔中的說明進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM