1

我不确定这是否可行,但我希望能够使用 log4j 注销数据。但是,比起 log.info() 语句的实际位置,我更希望 log4j 在普通字段中显示调用函数方法名称、行等,而不是作为日志数据。

是否可以覆盖日志事件的数据字段?

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
    }
}
4

1 回答 1

0

我不完全确定我完全按照你在做什么,但听起来 AspectJ 可以帮助你解决问题。

如果您要创建一个包装对记录器方法的调用的方面,您将能够提取调用者的方法/类并覆盖发送到实际记录器的任何参数(使用ProceedingJoinPoint)。

我不完全确定您可以在 Log4j 的哪个位置指定您自己的行号、类信息等,但我认为某处必须有某些东西。否则,您必须编写自己的记录器实现,您可以在其中指定该信息。

于 2014-10-20T20:19:00.793 回答