编程自定义json布局log4j2

hlswsv35  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(312)

我有 Java 利用 Log4j2 framework. 使用自定义参数记录异常或信息时使用json结构。出于这个原因,我正在尝试以编程方式配置log4j2。我知道建议使用基于文件的配置,但似乎最好以编程方式为我的案例初始化框架。
这就是我试图建立的结构。
自定义json布局 HttpAppender 这将通过http发送日志
如果httpappender失败,它将使用 JdbcAppender 写入数据库
如果jdbcappender失败,它将使用 FileAppender 写入日志文件
我能够生成 JsonLayout 但我不能添加自定义字段,也不能从默认结构中删除现有字段。我可能查阅了50多篇文章/问题,但没有一篇对我有用。这是我目前的代码。

  1. public static void initializeLogger()
  2. {
  3. ConfigurationBuilder<BuiltConfiguration> builder =
  4. ConfigurationBuilderFactory.newConfigurationBuilder();
  5. builder.setStatusLevel(Level.DEBUG);
  6. builder.setConfigurationName("DefaultLogger");
  7. //Creating console appender just to see logging is there.
  8. AppenderComponentBuilder appenderBuilder = builder.newAppender("Console", "CONSOLE")
  9. .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
  10. appenderBuilder.add(builder.newLayout("PatternLayout")
  11. .addAttribute("pattern", pattern)
  12. .addAttribute("AdditionalField.key", "asd")
  13. .addAttribute("AdditionalField.value", "qwe"));
  14. RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.DEBUG);
  15. rootLogger.add(builder.newAppenderRef("Console"));
  16. builder.add(appenderBuilder);
  17. //Creating the file appender
  18. LayoutComponentBuilder layoutBuilder = builder.newLayout("JsonLayout")
  19. .addAttribute("compact", "false")
  20. .addAttribute("AdditionalField", builder.newKeyValuePair("asd", "qwe"));
  21. ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
  22. .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "1KB"));
  23. appenderBuilder = builder.newAppender("LogToRollingFile", "RollingFile")
  24. .addAttribute("fileName", fileName)
  25. .addAttribute("filePattern", "applog-%d{MM-dd-yy-HH-mm-ss}.log.")
  26. .add(layoutBuilder)
  27. .addComponent(triggeringPolicy);
  28. builder.add(appenderBuilder);
  29. rootLogger.add(builder.newAppenderRef("LogToRollingFile"));
  30. builder.add(rootLogger);
  31. Configurator.reconfigure(builder.build());
  32. }

这段代码打印到控制台,并将json格式的日志写入文件。自定义值不会添加到json中。我试图通过它的 builder 但我无法将其添加到生成器本身。

  1. //Probably creating a new layout instance with additional fields
  2. //might be helpful but I cannot use this in the builder above.
  3. JsonLayout layout = JsonLayout.newBuilder()
  4. .setAdditionalFields(new KeyValuePair [] {
  5. new KeyValuePair("asd", "qwe"),
  6. new KeyValuePair("zxc", "rty"),
  7. }).build();

我需要添加到json的参数是动态的,我不知道自定义节点的键和值。在这个阶段,我尝试在将其写入文件时创建一个自定义json布局。
我可能是做得完全错误,所以请建议!我愿意接受建议。谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题