Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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
Java 使用LogManager.getLogger()获取自定义记录器包装类的引用_Java_Logging_Log4j2 - Fatal编程技术网

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

Java 使用LogManager.getLogger()获取自定义记录器包装类的引用,java,logging,log4j2,Java,Logging,Log4j2,我使用的是Log4j2,默认的记录器实现已经在我的项目中广泛使用。我现在需要解析日志消息并在将某些关键字记录到日志文件之前替换它们。满足此需求的一个好方法可能是重写记录器方法,如info(),error(),。。。或者它们的底层底层方法,在这里我可以解析消息并修改它,然后调用原始的超级类记录器方法 我看到AbstractLogger类是Logger接口的实现类,当您执行Logger Logger=LogManager.getLogger()时在您的类中,您可以获得AbstractLogger类的

我使用的是Log4j2,默认的记录器实现已经在我的项目中广泛使用。我现在需要解析日志消息并在将某些关键字记录到日志文件之前替换它们。满足此需求的一个好方法可能是重写记录器方法,如
info()
error()
,。。。或者它们的底层底层方法,在这里我可以解析消息并修改它,然后调用原始的超级类记录器方法

我看到
AbstractLogger
类是
Logger
接口的实现类,当您执行
Logger Logger=LogManager.getLogger()时
在您的类中,您可以获得
AbstractLogger
类的引用

现在,我创建了一个类
CustomLogger
,该类扩展了
AbstractLogger
,其javadoc要求这样做:

记录器的基本实现。强烈建议: 记录器实现扩展了这个类


问题是,如何使
LogManager.getLogger()
返回我的
CustomLogger
类的引用,而不是
AbstractLogger
类,这样就不需要修改现有类中的log语句,并且我能够在记录消息之前解析和修改它们。目前,我继续获取AbstractLogger引用。我想知道Log4j打算让用户如何扩展它的实现。

我不想说RTM,但这是RTM的一个例子。下面的内容应该可以帮助你开始你想要的东西。特别是在底部查看关于如何编译客户日志的第一个链接


正如我在评论中提到的,我认为appender可能是一个更好的地方。这意味着您必须实施

org.apache.logging.log4j.core.Appender
或者从

org.apache.logging.log4j.core.appender.AbstractAppender
改变它的形状

public void append(LogEvent event) {}   
方法。根据您的需要,您还可以修改或复制一些其他appender类(不幸的是,其中一些已声明为final)并相应地修改它


.rm

您是否考虑过在输出中,即在附录中执行此操作?。。。或者一个格式化程序,当然,这是一个我没有想到的好技巧。我现在在appender中处理了它,它工作了。你可以添加一个答案和一个样本,我可以给你的学分,如果你愿意。我已经提到了这些链接,但没有发现它有用。如果您看到部分:要获取对自定义类的引用,必须使用类似于
private static final ExtLogger=ExtLogger.create(MyService.class)的东西不符合我使用LogManager.getLogger()获取自定义记录器类引用的要求。