Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
log4j2的自定义包装器_Log4j2 - Fatal编程技术网

log4j2的自定义包装器

log4j2的自定义包装器,log4j2,Log4j2,我想围绕log4j2构建一个包装器,以执行以下操作: 1) 大约有6个必填字段,如事件名称、操作、描述等 2) 有些字段,我想让它们只使用某些值,比如enum 3) 应在Splunk的键值对中创建日志 以下是我的做法: 1) 创建了一个名为CustomLogger Acce的类,将必填字段、logger和变量字段设置为键值 2) 用户可以调用如下方法: CustomLogger.info(logger, transactionId, app_name, event_name,

我想围绕log4j2构建一个包装器,以执行以下操作: 1) 大约有6个必填字段,如事件名称、操作、描述等 2) 有些字段,我想让它们只使用某些值,比如enum 3) 应在Splunk的键值对中创建日志

以下是我的做法: 1) 创建了一个名为CustomLogger Acce的类,将必填字段、logger和变量字段设置为键值 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) 方法和行号丢失,因为它是从其他方法调用的


这将在我的内部应用程序中广泛使用,所以我希望正确地使用它。这种方法行吗,还是有更好的方法?

看看这个Jira附带的代码生成器:

也许您可以将其用作基类?为您提供了一个稍微好一点的API。 (我仍然需要更新它以反映log4j-2.0-rc2中的一些API更改…)


更新


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

我们提出了日志4J 2LOG4J2-695,非常感谢Remko和Ralph回答了所有问题,并通过Splunk CIM为log4j2上的自定义记录器提供了解决方案。Jira票据包含所有详细信息: