我不确定这是否可行,但我希望能够使用log4j注销数据。但是,我希望log4j在正常字段中显示调用函数方法名称,行等,而不是日志数据,而不是log.info()语句的实际位置。
是否可以覆盖日志事件的数据字段?
public class Foo
{
public static void info(String msg)
{
Logger aLogger = Logger.getRootLogger();
// -- Set the calling function location info here
aLogger.info(msg);
}
}
public class Bar
{
public void test()
{
Foo.info("x"); // -- Want this line, file, class, method logged
}
}
答案 0 :(得分:0)
我不完全确定我会完全遵循您的行为,但听起来AspectJ可以帮助您解决问题。
如果您要创建一个包含对记录器方法的调用的方面,您将能够提取调用方的方法/类并覆盖发送到实际记录器的任何参数(使用ProceedingJoinPoint)
我不完全确定在Log4j中您可以指定自己的行号,类信息等,但我认为某些地方必须存在某些内容。否则,您必须编写自己的记录器实现,您可以在其中指定该信息。