为什么我的较低级别的日志不写入文件,但错误和更高级别的文件呢?

数据仓库

我创建了一个小函数来设置日志记录,使用文件处理程序处理“所有内容”,并使用 smtphandler 处理错误及更高版本。错误日志写入日志文件并正确发送到电子邮件,但 debug、info、notset 不会,即使文件处理程序的 setlevel 设置为 0。为什么?下面的代码

#logsetup.py
import logging
import logging.handlers

def _setup_logger(name, log_file):
    """Function to setup logger"""

    logger = logging.getLogger(name)

    #Create Formatters
    file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    mail_formatter = logging.Formatter('%(name)s - %(message)s')

    #Create handler, set formatting, set log level
    file_handler_obj = logging.FileHandler(log_file)
    file_handler_obj.setFormatter(file_formatter)
    file_handler_obj.setLevel(0)

    #Create handler, set formatting, set log level
    smtp_handler_obj = logging.handlers.SMTPHandler(mailhost=('smtp.gmail.com', 587),
                        fromaddr='[email protected]',
                        toaddrs='[email protected]',
                        subject='Error in Script',
                        credentials=('[email protected]', 'pwexample'),   #username, password
                        secure=())
    smtp_handler_obj.setFormatter(mail_formatter)
    smtp_handler_obj.setLevel(logging.ERROR)

    # add the handlers to logger
    logger.addHandler(smtp_handler_obj)
    logger.addHandler(file_handler_obj)

    return logger

#mytest.py
import time
import logsetup

if __name__ == '__main__':

    TEST_SETTINGS = config_funcs._get_config('TEST_SETTINGS')

    logtime = time.strftime('%Y%m%d') # -%H%M%S")
    log = logsetup._setup_logger('TEST', TEST_SETTINGS['logging_dir'] + 'Py_Log_%s.log' % logtime)

    log.error('Writes to log file and sends email')
    log.debug('Supposed to write to log file, does nothing.')
数据仓库

显然,除了处理程序之外,日志记录还需要自己的日志记录级别。在返回 logger 之前设置 logger.setLevel(logging.DEBUG) 会使其正常工作。文档说

创建记录器时,级别设置为 NOTSET(当记录器是根记录器时,这会导致处理所有消息,或者当记录器是非根记录器时将其委托给父级)。请注意,根记录器是使用级别 WARNING 创建的。

这意味着如果处理程序的级别低于根记录器(不是 ERROR,而是 DEBUG ),那么我猜是一个孩子的处理程序,因为我得到了一个命名记录器?不太确定它的原因,但这确实“修复”了它,以防以后有人遇到这个问题。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

较低级别的事件是什么?

较低级别的网络是否可以为较高级别的网络提供IP地址?以及如何预防呢?

为什么我不能通过配置文件更改日志类别的日志级别?

Groovy:转义较低级别的JSON

将道具从较高级别的组件传递到较低级别的组件,React Router正在运行

为什么更高级别的类型在Haskell中如此脆弱

捕获较低级别的类抛出的消息

根据较低级别的结果评估分层查询

在较低级别的MultiIndex DataFrame中更改多个值

Excel函数用于删除较低级别的重复项

没有看到较低级别的着色器语法错误

实施Web代理时,服务器应如何报告较低级别的协议错误?

Postgres子查询可以访问更高级别的表中的列。这是一个错误吗?或我不了解的功能?

不同日志文件中不同级别的日志

自定义记录器如何仅在较低级别的日志记录到stdout时才将错误/严重记录到stderr?

将更高级别的减速器与组合的低级减速器一起使用

如何从批处理脚本的当前路径中获取更高级别的文件夹的名称?

是否可以配置 gr-ieee-80211 wifi_rx 文件以接收更高级别的层?

文件系统级别的SETUID

我刚刚记录的最差级别的日志是什么?

可以使用更高级别的类型模拟类型级别的类型类吗?

Serilog 中不同级别的不同日志文件

将每个级别的日志保存在不同的文件中

为什么我在 Application Insights 中看不到“失败”级别的日志输出?

返回更高级别的UITableView时的ViewDidLoad

通过更高级别的结构访问子变量

熊猫添加更高级别的列多索引

跨更高级别的容器建立边界

OpenCV SVM总是预测更高级别的标签