如何覆盖Log4J行号

时间:2012-11-21 15:39:50

标签: java parameters log4j override

我不确定这是否可行,但我希望能够使用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
    }
}

1 个答案:

答案 0 :(得分:0)

我不完全确定我会完全遵循您的行为,但听起来AspectJ可以帮助您解决问题。

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

我不完全确定在Log4j中您可以指定自己的行号,类信息等,但我认为某些地方必须存在某些内容。否则,您必须编写自己的记录器实现,您可以在其中指定该信息。