我有 Java
利用 Log4j2 framework.
使用自定义参数记录异常或信息时使用json结构。出于这个原因,我正在尝试以编程方式配置log4j2。我知道建议使用基于文件的配置,但似乎最好以编程方式为我的案例初始化框架。
这就是我试图建立的结构。
自定义json布局 HttpAppender
这将通过http发送日志
如果httpappender失败,它将使用 JdbcAppender
写入数据库
如果jdbcappender失败,它将使用 FileAppender
写入日志文件
我能够生成 JsonLayout
但我不能添加自定义字段,也不能从默认结构中删除现有字段。我可能查阅了50多篇文章/问题,但没有一篇对我有用。这是我目前的代码。
public static void initializeLogger()
{
ConfigurationBuilder<BuiltConfiguration> builder =
ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.DEBUG);
builder.setConfigurationName("DefaultLogger");
//Creating console appender just to see logging is there.
AppenderComponentBuilder appenderBuilder = builder.newAppender("Console", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", pattern)
.addAttribute("AdditionalField.key", "asd")
.addAttribute("AdditionalField.value", "qwe"));
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.DEBUG);
rootLogger.add(builder.newAppenderRef("Console"));
builder.add(appenderBuilder);
//Creating the file appender
LayoutComponentBuilder layoutBuilder = builder.newLayout("JsonLayout")
.addAttribute("compact", "false")
.addAttribute("AdditionalField", builder.newKeyValuePair("asd", "qwe"));
ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "1KB"));
appenderBuilder = builder.newAppender("LogToRollingFile", "RollingFile")
.addAttribute("fileName", fileName)
.addAttribute("filePattern", "applog-%d{MM-dd-yy-HH-mm-ss}.log.")
.add(layoutBuilder)
.addComponent(triggeringPolicy);
builder.add(appenderBuilder);
rootLogger.add(builder.newAppenderRef("LogToRollingFile"));
builder.add(rootLogger);
Configurator.reconfigure(builder.build());
}
这段代码打印到控制台,并将json格式的日志写入文件。自定义值不会添加到json中。我试图通过它的 builder
但我无法将其添加到生成器本身。
//Probably creating a new layout instance with additional fields
//might be helpful but I cannot use this in the builder above.
JsonLayout layout = JsonLayout.newBuilder()
.setAdditionalFields(new KeyValuePair [] {
new KeyValuePair("asd", "qwe"),
new KeyValuePair("zxc", "rty"),
}).build();
我需要添加到json的参数是动态的,我不知道自定义节点的键和值。在这个阶段,我尝试在将其写入文件时创建一个自定义json布局。
我可能是做得完全错误,所以请建议!我愿意接受建议。谢谢
暂无答案!
目前还没有任何答案,快来回答吧!