我想在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)方法和行号丢失,因为它是从不同的方法调用的
这将在我的内部应用程序中广泛使用,因此希望正确执行。这种方法是否正确或是否有更好的方法?
答案 0 :(得分:1)
查看附加到此Jira的代码生成器:https://issues.apache.org/jira/browse/LOG4J2-519
也许您可以将其用作基类?给你一个更好的API。 (我仍然需要更新它以反映log4j-2.0-rc2中的一些API更改...)
更新
另一种方法是在log4j2 api模块中定义Message接口的自定义实现。您的自定义消息将包含一个构造函数,其中包含您根据需要定义的所有字段,而toString方法(也可能是其他一些方法)会根据您的需要将这些字段格式化为键值对。