使用LogManager.getLogger()获取自定义Logger包装器类的引用

时间:2019-05-07 10:35:02

标签: java logging log4j2

我正在使用Log4j2,默认记录器实现已在我的项目中广泛使用。现在,我需要解析日志消息并替换某些关键字,然后再将它们记录到日志文件中。满足此要求的一个好方法可能是覆盖public void onResponse(JSONObject response) { try { if (response.getBoolean("success")) { Log.i("response", response.toString()); Toast.makeText(RegisterActivity.this, response.get("message").toString(), Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(), MainActivity.class)); finish(); } else { Log.e("Response", response.toString()); Toast.makeText(RegisterActivity.this, "" + response, Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } } info()等记录器方法或它们的底层底层方法,在这些方法中,我可以解析消息并对其进行修改,然后调用原始的超级方法。类记录器方法。

我看到error()类是AbstractLogger接口的实现类,当您在类中进行Logger时,您会得到Logger logger = LogManager.getLogger();类的引用。

现在,我创建了一个扩展AbstractLogger的类CustomLogger,其javadoc表示这样做:

  

记录器的基本实现。强烈建议您   记录器的实现扩展了此类。

问题是,如何使AbstractLogger返回我的LogManager.getLogger()类而不是CustomLogger类的引用,以便不需要修改现有类中的log语句,并且在记录消息之前,我可以解析和修改消息。目前,我继续获得AbstractLogger参考。我想知道Log4j是如何使用户扩展其实现的。

2 个答案:

答案 0 :(得分:1)

正如我的评论中提到的

-我认为添加器可能是一个更好的选择。这意味着您将必须实现

org.apache.logging.log4j.core.Appender

或从

扩展
org.apache.logging.log4j.core.appender.AbstractAppender

并更改为

public void append(LogEvent event) {}   

方法。根据您的需要,您还可以修改或复制一些其他的appender类(不幸的是,其中一些声明为final)并相应地进行修改。

.rm

答案 1 :(得分:0)

我不想说RTM,但这是RTM的情况。以下内容将帮助您入门。专门在底部查找有关如何编译客户记录器的第一个链接。

http://logging.apache.org/log4j/2.0/manual/customloglevels.html

https://logging.apache.org/log4j/2.0/log4j-core/apidocs/org/apache/logging/log4j/core/tools/Generate.CustomLogger.html