Java 如何覆盖Log4J行号

Java 如何覆盖Log4J行号,java,parameters,log4j,overriding,Java,Parameters,Log4j,Overriding,我不确定这是否可行,但我希望能够使用log4j注销数据。但是,与log.info()语句的实际位置不同,我更希望调用函数的方法名、行等由log4j显示在普通字段中,而不是作为日志数据 是否可以覆盖日志事件的数据字段 public class Foo { public static void info(String msg) { Logger aLogger = Logger.getRootLogger(); // -- Set the calli

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

我不完全确定我是否完全遵循了您正在做的事情,但听起来AspectJ可以帮助解决您的问题

如果要创建一个方面来包装对记录器方法的调用,则可以提取调用方的方法/类,并覆盖发送到实际记录器的任何参数(使用)


我不完全确定在Log4j中的什么地方可以指定您自己的行号、类信息等,但我认为一定有什么东西在那里。否则,您将不得不编写自己的记录器实现,在其中可以指定该信息。

您是否考虑过使用?不完全是你想要的,但可以解决你的目的。我没有,但我会调查一下。如果你想用
info()
方法来做的话。你可以覆盖它。因为这不是通常的
info()
does@MukulGoel覆盖记录器中的信息?我知道这是不正常的。我有一个现有的系统,我正在尝试将log4j插入其中,而不更改日志语句的所有实例。我有一个自己开发的记录器,它使用诸如info、debug等静态方法。在这些方法中,我获得根记录器并传递消息。输出显示静态方法的行、类等,而不是调用方。看起来我必须咬紧牙关进行编辑。通过将其添加到属性文件并使用overides log4j.appender.A1.layout.ConversionPattern=%d%-5p[%t]-17c{2}(%13F:%L)%3x-%m%n扩展默认记录器,我可以实现这一点