2010-04-20 41 views
2

我生成这样两个实例:为什么新实例使用旧实例的记录器?

gameManager manager1 = new CTManager(owner,players1,"en"); 
    manager1.start(); 
    gameManager manager2 = new CTManager(owner,players2,"en"); 
    manager2.start(); 

的游戏管理的start()方法看起来像这样:

void start() { 
    game.start(); 
} 

当我创建游戏实例我创建了一个loger:log = Logger.getLogger("TestLog");log是公共领域game所属类)。

game.start()我运行许多过程和给它们相应的log的参考。所以,我期望manager1和manager2会写入不同的文件。但是manager2写入它自己的文件和manager1的日志文件。为什么会发生?

回答

0

假设您使用Log4J或java.util.logging(基于Log4J),每个类/名称只会记录一个。无论您使用相同的参数调用getLogger方法多少次,它都会返回完全相同的对象。

因此,当您在每个实例中调用getLogger("TestLog")时,您将获得对同一个Logger对象的引用。因此它只会记录到一个地方,即为“TestLog”记录器配置的地方。

如果你想拥有这两个实例输出去不同的地方,你就需要让他们打电话getLogger使用不同的参数,使他们获得不同的记录器(当然配置日志记录系统,使得这两个记录器有不同的输出)。

2

这两次都使用相同的日志名称“TestLog”,所以两次都得到相同的Logger实例。这就是这个班级的工作原理。如果您使用内置的java.util.logging.Logger类,请参阅here。其他日志包可能有类似的行为。

0

从大多数日志框架的角度来看,放在getLogger方法中的名称是记录器唯一的名称,而不是类实例。所以当你打电话给Logger.getLogger("TestLog");时,你会得到相同的记录器。

相关问题