log4j2将参数传递给自定义追加程序

时间:2019-03-05 23:07:27

标签: java log4j

在log4j2中是否可以在配置文件中定义参数并在自定义附加程序的append()方法中获取该参数?

例如,在属性文件中定义如下参数:

appender.myCustomAppender.param1 = Hello-World

然后在我的附加程序中执行以下操作:

public void append(LogEvent event) {
   org.apache.logging.log4j.util.ReadOnlyStringMap map = event.getContextData(); 
       String param1 = map.get("param1");

...

有什么想法吗? 谢谢, -迈克

2 个答案:

答案 0 :(得分:0)

好,我知道了。我通过XML文件的properties部分传递参数:

<Properties>
    <Property name="Param1">Hello-World</Property>
</Properties>

然后在我的自定义附加程序中执行以下操作:

LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration configuration = context.getConfiguration();
String param1= configuration.getStrSubstitutor().getVariableResolver().lookup("Param1");        

答案 1 :(得分:0)

我们可以根据Log4j2 doc文档来以XML创建自己的Appender定义。

每个@PluginAttribute()对应于XML中的属性,每个@PluginElement()对应于XML节点。

例如Java代码:

@PluginFactory
public static StubAppender createAppender(@PluginAttribute("name") String name,
                                          @PluginAttribute("test") boolean test,
                                          @PluginElement("Layout") Layout layout){
    //do a thing
}

将从此XML中读取属性:

<Stub name="STDOUT" test="true">
    <PatternLayout pattern="%date %level method: %class{1}.%method (%file:%line) - %message%n"/>
</Stub>