我正在开发一个Django应用程序,我试图用错误/跟踪日志记录Python的日志记录模块.理想情况下,我希望为站点的不同区域配置不同的记录器.到目前为止,我已经完成了所有这些工作,但有一件事让我摸不着头脑.
我有根记录器转到sys.stderr,我已经配置了另一个记录器来写入文件.这是在我的settings.py文件中:
sviewlog = logging.getLogger('MyApp.views.scans')
view_log_handler = logging.FileHandler('C:\\MyApp\\logs\\scan_log.log')
view_log_handler.setLevel(logging.INFO)
view_log_handler.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'))
sviewlog.addHandler(view_log_handler)
Run Code Online (Sandbox Code Playgroud)
看起来很简单.不过这是问题所在:无论我写入sviewlog还是写入日志文件两次.根记录器只打印一次.就像addHandler()被调用两次一样.当我将代码放入调试器时,这正是我所看到的.settings.py中的代码执行两次,因此创建了两个FileHandler并将其添加到同一个logger实例中.但为什么?我该如何解决这个问题呢?
谁能告诉我这里发生了什么?我已经尝试将sviewlog记录器/处理程序实例化代码移动到它所使用的文件中(因为这实际上对我来说似乎是合适的地方),但我有同样的问题.我在网上看到的大多数例子都只使用根记录器,而我更喜欢使用多个记录器.