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 如何释放Log4J记录器_Java_Logging_Log4j - Fatal编程技术网

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没有解决方案。它的设计假设记录器名称的数量是有界的,并且相对较小(例如,每个类一个)。如果这些假设是正确的,那么内存就不会泄漏。但是,如果您正在动态生成记录器名称,这是一个坏主意:内存泄漏是不可避免的。是否有一种合理的方法,如何每次使用该方法时都记录到一个单独的文件