Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 仅在超类/抽象类中声明slf4j logger并在所有子类中使用它是一种良好的做法?_Java_Logging_Slf4j - Fatal编程技术网

Java 仅在超类/抽象类中声明slf4j logger并在所有子类中使用它是一种良好的做法?

Java 仅在超类/抽象类中声明slf4j logger并在所有子类中使用它是一种良好的做法?,java,logging,slf4j,Java,Logging,Slf4j,仅在超类/抽象类中声明slf4j logger可以使子类的内容更清晰(没有像私有静态最终logger logger=LoggerFactory.getLogger(Tuple5x36.class);mess这样的混乱) 建议这样做,还是存在明显的缺陷?在日志中使用这种方法,您的所有消息都将属于您的超类,因此您无法通过祖先来区分它们,只能通过消息本身来区分。 因此,我建议为每个类提供一个单独的记录器实例。在日志中使用这种方法,所有消息都将属于您的超类,因此您无法通过祖先来区分它们,只能通过消息本身

仅在超类/抽象类中声明slf4j logger可以使子类的内容更清晰(没有像
私有静态最终logger logger=LoggerFactory.getLogger(Tuple5x36.class);
mess这样的混乱)


建议这样做,还是存在明显的缺陷?

在日志中使用这种方法,您的所有消息都将属于您的超类,因此您无法通过祖先来区分它们,只能通过消息本身来区分。
因此,我建议为每个类提供一个单独的记录器实例。

在日志中使用这种方法,所有消息都将属于您的超类,因此您无法通过祖先来区分它们,只能通过消息本身来区分。
因此,我建议为每个类使用一个单独的记录器实例。

陷阱在于调用
LoggerFactory.getLogger(Tuple5x36.class)
创建一个记录器,该记录器的名称空间为用于创建它的类的完全限定名称

换句话说,此调用将创建一个放置在
com.package.to.Tuple5x36
中的记录器。它将出现在所有子类的日志条目中,因此您将很难(或者可能无法)区分实际记录的类


您也不能更改单个继承类的日志记录级别,但可以更改所有继承类的日志记录级别

陷阱在于调用
LoggerFactory.getLogger(Tuple5x36.class)
创建一个记录器,该记录器的名称空间为用于创建它的类的完全限定名

换句话说,此调用将创建一个放置在
com.package.to.Tuple5x36
中的记录器。它将出现在所有子类的日志条目中,因此您将很难(或者可能无法)区分实际记录的类


您也不能更改单个继承类的日志记录级别,但可以更改所有继承类的日志记录级别

我建议两种方法都不要,因为第一种方法表明日志消息来自抽象类,即使它不是,第二种方法确实很混乱


将“lombok”添加到依赖项中,然后用@Slf4j注释每个类,以获得一个可用的“private Logger log”变量。

我建议两者都不做,因为第一个建议日志消息来自抽象类,即使它不是,第二个确实很混乱


将“lombok”添加到依赖项中,然后用@Slf4j注释每个类,以获得可用的“private Logger log”变量。

我看不到任何陷阱。在您的超类中声明它:

protectedlogger-Logger=LoggerFactory.getLogger(this.getClass())


我相信getLogger()的大多数实现(如果不是全部的话)都会从映射返回单例对象。因此,除了避免在实例构造时调用getLogger()之外,将Logger声明为静态(即使几乎每个人都这样做)没有任何好处。但由于这一呼吁很快,其好处基本上是不存在的。(不声明它们为静态的好处是使它们易于在单元测试中模拟。)

我看不到任何陷阱。在您的超类中声明它:

protectedlogger-Logger=LoggerFactory.getLogger(this.getClass())


我相信getLogger()的大多数实现(如果不是全部的话)都会从映射返回单例对象。因此,除了避免在实例构造时调用getLogger()之外,将Logger声明为静态(即使几乎每个人都这样做)没有任何好处。但由于这一呼吁很快,其好处基本上是不存在的。(不声明它们为静态的好处是使它们易于在单元测试中模拟。)

在几秒钟后写了同样的东西。很抱歉在你身后几秒钟写了同样的东西。很抱歉向上投票。