两个不同记录器的两个文件处理程序将获得相同的内容

女王

我编写了一个脚本,该脚本从cloudwatch收集事件日志,将其写入两个文件,然后通过邮件发送每个文件的内容。因为我想收到两封电子邮件,所以每个记录器都有不同类型的日志,因此我创建了两个记录器:

logLevel = logging.INFO
doWait = object()
if os.path.exists ('.debug'):
    logLevel = logging.DEBUG
logger1 = logging.getLogger()
logger2 = logging.getLogger()
logger1.setLevel(logLevel)
logger2.setLevel(logLevel)
formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
fileHandler1 = os.path.join('/tmp/', 'error-admin-' + datetime.datetime.utcnow().strftime('%Y-%m-%d') +  '.log')
fileHandler2 = os.path.join('/tmp/', 'error-user-' + datetime.datetime.utcnow().strftime('%Y-%m-%d') +  '.log')
fh1 = logging.handlers.RotatingFileHandler(fileHandler)
fh2 = logging.handlers.RotatingFileHandler(fileHandler2)
fh1.setLevel(logLevel)
fh2.setLevel(logLevel)
fh1.setFormatter(formatter)
fh2.setFormatter(formatter)
logger1.addHandler(fh1)
logger2.addHandler(fh2)

在主要方面,我这样调用函数:

function1(arg1,arg2,logger1)
function2(arg1,arg2,logger2)

现在,我的问题是,当我执行脚本时,即使在分开记录器的情况下,两个文件处理程序中的内容也相同。为什么会这样呢?

rtkaleta

发生这种情况的原因是,logger1并且logger2两者都指向下面 Logger

文档Multiple calls to getLogger() with the same name will always return a reference to the same Logger object.

您需要两个单独的Logger对象:

logger1 = logging.getLogger('error-admin')
logger2 = logging.getLogger('error-user')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java:如何使两个记录器写入不同的文件(记录器)

两个Pylons记录器处理程序(Sentry / Raven和控制台)具有相同的名称

注销:两个附加程序,多个记录器,不同级别

两个不同级别的Log4Net记录到同一记录器的两个不同附加程序

Python日志记录-两个记录器,两个日志文件-如何配置logging.ini

使用两个不同的混淆器处理相同的.NET程序集

log4j两个带单独文件的记录器

如何从两个输入文件获得匹配的记录,而awk中两个文件的长度不同?

在两个不同的程序包中获得两个具有相同名称的功能的帮助

同步两个目录:相同的文件名,不同的文件结尾,不同的文件内容

log4perl一个具有两个附加程序和不同日志级别的记录器

如何分配相同的控制器方法来处理两个不同视图上的两个表单?

如何将相同程序集的两个版本从两个不同的子文件夹加载到两个不同的域中?

无法在python中为两个日志记录处理程序设置不同的日志记录级别

用两个不同的外键联接两个表以获得相同的字段

两个不同的变量获得相同的值

MatLab:相同的功能获得两个不同的结果

Winston javascript记录器正在创建两个单独的日志文件。如何将所有条目记录到单个文件中?

两个或多个用户处理相同内容的方案

如何比较两个文件以获得匹配的记录?

比较两个文件并获得相同行的输出

有两个不同的处理程序用于登录python日志记录模块

交换两个相同容量驱动器的内容

两个事件的相同事件处理程序需要不同的签名

如何根据单击的按钮将相同的数据发布到两个不同的处理程序?

两个几乎完全相同的程序,但输出不同

如何检查两个文件内容是否相同?

如何检查两个文件的内容是否相同

名称,内容,所有者和权限相同的两个文件如何不同?