我以这种方式生成了2个实例:
gameManager manager1 = new CTManager(owner,players1,"en");
manager1.start();
gameManager manager2 = new CTManager(owner,players2,"en");
manager2.start();
gameManager的start()
方法如下:
void start() {
game.start();
}
当我创建游戏实例时,我创建了一个loger:log = Logger.getLogger("TestLog");
(log
是game
所属的类的公共字段。
在game.start()
我运行了很多进程,并为他们提供了对应log
的引用。所以,我希望manager1和manager2会写入不同的文件。但是manager2写入自己的文件和manager1的日志文件。为什么会这样?
答案 0 :(得分:2)
两次使用相同的日志名称“TestLog”,因此两次都获得Logger
的相同实例。这就是那个班级的工作方式。如果您使用的是内置java.util.logging.Logger
课程,请参阅here。其他日志包可能具有类似的行为。
答案 1 :(得分:0)
假设您正在使用Log4J或java.util.logging(基于Log4J),每个类/名称只会记录一个。无论您使用相同的参数调用getLogger
方法多少次,它都会返回完全相同的对象。
因此,当您在每个实例中调用getLogger("TestLog")
时,您将获得对完全相同的Logger
对象的引用。因此,它只会记录到一个位置,即为“TestLog”记录器配置的位置。
如果您希望将这两个实例的输出转到不同的位置,则需要让它们使用不同的参数调用getLogger
,以便它们获得不同的记录器(当然,还要配置日志记录系统,以便这两个记录器有不同的输出。)
答案 2 :(得分:0)
从大多数日志记录框架的角度来看,您在getLogger方法中放置的名称是使记录器唯一的原因,而不是类实例。因此,当您致电Logger.getLogger("TestLog");
时,您会在每种情况下获得相同的记录器。