【问题标题】:Can I collect logs (messages) from log4j into one java object我可以将 log4j 中的日志(消息)收集到一个 java 对象中吗
【发布时间】:2017-03-09 15:35:08
【问题描述】:

我不想将它打印到控制台或写入某个文件,而是将所有日志(即消息)收集到 Java 对象中的某个字符串集合中,如下所示:

class LogCollector {
    List<String> messages;
}

这将使我更容易生成自定义 HTML 报告(只需将“LogCollector”对象传递给某些方法)。如果我可以用 Log4J 实现它会更好。

更详细的问题: 我想做一些类“LoggingPart”:

class LoggingPart {
    String name;
    List<String> messages;
    List<LoggingPart> parts = new ArrayList<>();

    public static void start(String name) {
        parts.add(new LoggingPart(name));

        /* Logic that after every call LoggingPart.start("someName")  */
        /* in some other class will start collecting messages from    */
        /* logger into LoggingPart instance of name "someName"        */

        /* Report will be generated only of messages from particular  */
        /* instance with specified name                               */
    }
}

【问题讨论】:

  • 看这里:tutorialspoint.com/log4j/log4j_htmllayout.htm 不是你想做的吗?
  • 好的,不完全是,但您将我重定向到有趣的可能解决方案 - 覆盖 HtmlLayout 的方法格式,就像在 link 上回答的那样。问题是,在这种情况下,我会通过 log4j 获取这个生成的 HTML,从中提取所需的信息(日志消息)(通过正则表达式?)并以我想要的方式对其进行格式化。有什么方法可以跳过“拉”步骤并直接获取这些消息?

标签: java logging log4j report generator


【解决方案1】:

我被推荐了很多东西,其中包括创建自定义 TestNG 侦听器,但解决方案非常简单:制作一个额外的 log4j Appender:

  1. 在 log4j 配置文件 (log4j.properties) 中添加 Appender
  2. 引用您的自定义 Appender 类,该类将包含处理日志的方法

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2020-07-17
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多