Java 如何释放Log4J记录器
我正在创建一个程序,它将全天候运行,并将持续处理多个任务。这些任务可以并行运行。每个任务都有独立的日志文件。因此,对于每个任务,我都希望创建自己的记录器,如下所示:Java 如何释放Log4J记录器,java,logging,log4j,Java,Logging,Log4j,我正在创建一个程序,它将全天候运行,并将持续处理多个任务。这些任务可以并行运行。每个任务都有独立的日志文件。因此,对于每个任务,我都希望创建自己的记录器,如下所示: Logger logger = Logger.getLogger("taskID"); 如何在任务完成后正确释放记录器,使其不再位于内存中?无法“释放”记录器对象。不过没关系。如果可以访问,您仍然可以使用它。。。它不应该被“释放”。如果无法访问,GC将回收它 顺便说一下,如果您真的在谈论log4j,那么您调用的获取命名记录器的方法
Logger logger = Logger.getLogger("taskID");
如何在任务完成后正确释放记录器,使其不再位于内存中?无法“释放”记录器对象。不过没关系。如果可以访问,您仍然可以使用它。。。它不应该被“释放”。如果无法访问,GC将回收它
顺便说一下,如果您真的在谈论log4j
,那么您调用的获取命名记录器的方法是。它被定义为返回一个存在的实例(具有相同的名称),因此您无需担心创建同一记录器的大量副本。无法“释放”一个记录器对象。不过没关系。如果可以访问,您仍然可以使用它。。。它不应该被“释放”。如果无法访问,GC将回收它
顺便说一下,如果您真的在谈论log4j
,那么您调用的获取命名记录器的方法是。它被定义为返回一个存在的实例(具有相同的名称),因此您无需担心创建同一记录器的大量副本。无法“释放”一个记录器对象。不过没关系。如果可以访问,您仍然可以使用它。。。它不应该被“释放”。如果无法访问,GC将回收它
顺便说一下,如果您真的在谈论log4j
,那么您调用的获取命名记录器的方法是。它被定义为返回一个存在的实例(具有相同的名称),因此您无需担心创建同一记录器的大量副本。无法“释放”一个记录器对象。不过没关系。如果可以访问,您仍然可以使用它。。。它不应该被“释放”。如果无法访问,GC将回收它
顺便说一下,如果您真的在谈论log4j
,那么您调用的获取命名记录器的方法是。如果存在一个实例,它被定义为返回一个现有实例(具有相同的名称),因此您无需担心创建同一记录器的大量副本。这不是一个记录器的实例化方式。您必须始终将它们设置为静态
和最终
。这样,您就不必再担心它了,因为每个类将只有一个Logger
实例
看看官方文件和一些手册。这也是非常好的开始
另一方面,我建议您使用SLF4j作为外观。这不是记录器的实例化方式。您必须始终将它们设置为静态
和最终
。这样,您就不必再担心它了,因为每个类将只有一个Logger
实例
看看官方文件和一些手册。这也是非常好的开始
另一方面,我建议您使用SLF4j作为外观。这不是记录器的实例化方式。您必须始终将它们设置为静态
和最终
。这样,您就不必再担心它了,因为每个类将只有一个Logger
实例
看看官方文件和一些手册。这也是非常好的开始
另一方面,我建议您使用SLF4j作为外观。这不是记录器的实例化方式。您必须始终将它们设置为静态
和最终
。这样,您就不必再担心它了,因为每个类将只有一个Logger
实例
看看官方文件和一些手册。这也是非常好的开始
PS:另一方面,我建议您使用SLF4j作为外观。最重要的是:getLogger方法为我提供了logger对象。我用不同的taskId多次调用它,因此我有许多记录器。当不再需要记录器时,我想从内存中释放它们。你的意思是,如果我调用Logger.getLogger(“狗”)和Logger.getLogger(“猫”),我可以得到相同的对象吗?最重要的是:getLogger方法给我Logger对象。我用不同的taskId多次调用它,因此我有许多记录器。当不再需要记录器时,我想从内存中释放它们。你的意思是,如果我调用Logger.getLogger(“狗”)和Logger.getLogger(“猫”),我可以得到相同的对象吗?最重要的是:getLogger方法给我Logger对象。我用不同的taskId多次调用它,因此我有许多记录器。当不再需要记录器时,我想从内存中释放它们。你的意思是,如果我调用Logger.getLogger(“狗”)和Logger.getLogger(“猫”),我可以得到相同的对象吗?最重要的是:getLogger方法给我Logger对象。我用不同的taskId多次调用它,因此我有许多记录器。我想在不再需要记录器时将其从内存中释放。您的意思是,如果我调用Logger.getLogger(“狗”)和Logger.getLogger(“猫”),我可以得到相同的对象吗?谢谢您的回答。问题是我没有很多同名的记录器,但每个记录器都有自己的名称。我不想在我的代码中出现内存泄漏。我认为log4j没有解决方案。它的设计假设记录器名称的数量是有界的,并且相对较小(例如,每个类一个)。如果这些假设是正确的,那么内存就不会泄漏。但是,如果您正在动态生成记录器名称,这是一个坏主意:内存泄漏是不可避免的。是否有一种合理的方法,如何每次使用该方法时都记录到一个单独的文件