在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");
...
有什么想法吗? 谢谢, -迈克
答案 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>