log4j2的自定义包装器

时间:2014-06-26 17:27:22

标签: log4j2

我想在log4j2周围构建一个包装器来执行以下操作: 1)大约有6个必填字段,如event_name,action,desc等 2)有些字段,我想让它们只使用某些值,比如enum 3)应该在Splunk的键值对中创建日志。

以下是我的方法: 1)创建了一个名为CustomLogger的类,将必填字段,记录器和变量字段作为键值进行加密 2)用户可以调用如下方法:

CustomLogger.info(logger, transactionId, app_name, event_name,
                "inside the loop", "inside the loop of the sample app",
                CustomLogger.Result.success, "looped in", "loop_count",
                String.valueOf(i));

方法定义:

public static String log(LogLevel logLevel, Logger logger,
        String transactionId, String app_name, String event_name,
        String action, String desc, Result result, String reason,
        String... addtnlFields)

该方法的问题: 1)不扩展log4j,不确定这是否正确 2)需要从每个类传递记录器。如果可以避免的话 3)方法和行号丢失,因为它是从不同的方法调用的

这将在我的内部应用程序中广泛使用,因此希望正确执行。这种方法是否正确或是否有更好的方法?

1 个答案:

答案 0 :(得分:1)

查看附加到此Jira的代码生成器:https://issues.apache.org/jira/browse/LOG4J2-519

也许您可以将其用作基类?给你一个更好的API。 (我仍然需要更新它以反映log4j-2.0-rc2中的一些API更改...)


更新

另一种方法是在log4j2 api模块中定义Message接口的自定义实现。您的自定义消息将包含一个构造函数,其中包含您根据需要定义的所有字段,而toString方法(也可能是其他一些方法)会根据您的需要将这些字段格式化为键值对。