Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 Log4j记录器中的日志类和方法名称_Java_Log4j - Fatal编程技术网

Java Log4j记录器中的日志类和方法名称

Java Log4j记录器中的日志类和方法名称,java,log4j,Java,Log4j,我需要获得Log4j记录器的类和方法名。最好的方法是什么?另外,我还想为整个应用程序创建一个logger实例——在每个类中声明logger是非常无聊的。解决这些问题的方法是什么。实际上,为整个应用程序创建一个记录器根本不是一个好主意。很容易搞乱记录器、日志级别、配置等 但是,如果您仍然需要它,可以在main方法中创建一个logger实例,并为每个类传递它(例如,在您使用的每个类中使用setLogger(),或者作为参数传递给类构造函数)。但同样,这样做100%是个坏主意。您可以在应用程序中使用%

我需要获得Log4j记录器的类和方法名。最好的方法是什么?另外,我还想为整个应用程序创建一个logger实例——在每个类中声明logger是非常无聊的。解决这些问题的方法是什么。

实际上,为整个应用程序创建一个记录器根本不是一个好主意。很容易搞乱记录器、日志级别、配置等


但是,如果您仍然需要它,可以在main方法中创建一个logger实例,并为每个类传递它(例如,在您使用的每个类中使用setLogger(),或者作为参数传递给类构造函数)。但同样,这样做100%是个坏主意。

您可以在应用程序中使用%C和%M占位符。请注意,出于性能原因,不建议使用它们

关于如何避免为每个类声明Logger,有几种方法。例如,如果创建公共基类是一个可行的选项,则可以声明一个受保护的最终记录器,如下所示:

abstract class Base {

    protected final Logger logger = Logger.getLogger(getClass());

}

class Concrete extends Base {

    public void testLogger() {
        logger.info("It works!");
    }

}
或者,您可以尝试使用依赖项注入框架注入记录器,例如

  • 使记录器实例保持静态
  • 每个类都有自己的Logger=>Logger.getLogger(xyz.class)
  • 使用2。然后您可以配置log4j