(Python)logging输出到控制台和文件

本文介绍了如何使用Python的logging模块配置日志,包括设置日志级别为INFO,记录信息到app.log文件以及同时输出到控制台。详细步骤展示了如何创建处理器、格式化器并将其添加到logger中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先直接上代码

import logging

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log')

# 输出到控制台
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

# 记录日志信息
logging.info('This is an info message.')

# 会同时输出到控制台和文件中

下面是解释

  • import logging
    导入 Python 的 logging 模块,该模块用于记录日志。

  • logging.basicConfig(level=logging.INFO, format=‘%(asctime)s - %(levelname)s - %(message)s’, filename=‘app.log’)
    basicConfig(): 方法用于配置日志记录。
    level=logging.INFO: 设置日志级别为 INFO,这意味着只有 INFO 级别及以上的日志信息会被记录。
    format=‘%(asctime)s - %(levelname)s - %(message)s’: 设置日志的格式,这里包括日志记录的时间、级别和消息内容。
    filename=‘app.log’:指定日志文件的名称为 app.log,日志信息会被写入到这个文件中。

  • console = logging.StreamHandler():创建一个处理器,用于将日志信息输出到控制台。

  • console.setLevel(logging.INFO):设置控制台处理器的日志级别为 INFO。

  • formatter = logging.Formatter(‘%(asctime)s - %(levelname)s - %(message)s’):创建一个格式化器,用于设置日志信息的格式。

  • console.setFormatter(formatter):将格式化器应用到控制台处理器。

  • logging.getLogger(‘’).addHandler(console):将控制台处理器添加到根 logger 中,这样根 logger 就会将日志信息发送到控制台。

  • logging.info(‘This is an info message.’):记录一条 INFO 级别的日志信息。

Python中,`logging`模块用于记录应用程序的日志信息。如果你发现日志没有输出控制台,可能是以下几个原因: 1. **配置文件设置**:默认情况下,`logging`会将错误级别及以上的消息打印到控制台。检查你的`logging.config`或者`.loggin.ini`文件中是否指定了控制台处理器(`StreamHandler`)及其设置。 2. **handler的添加**:确认你是否有在logger上添加控制台处理器(`logging.basicConfig()`函数通常会自动添加)。如果没有,需要手动添加`logging.StreamHandler()`, 并设置相应的level(如debug、info等)。 3. **过滤器设置**:检查是否有特定的filter阻止了某些日志级别或特定关键字的消息输出控制台。 4. **环境变量影响**:有些时候,如果设置了环境变量`LOGGING_TO_CONSOLE=False`,可能会禁用控制台输出。请确认你的应用环境中没有这样的设定。 5. **异常处理**:如果在尝试写入控制台时出现了异常,比如权限不足,日志可能不会显示出来。检查相关部分的代码,看是否有异常发生并妥善处理。 要解决这个问题,你可以尝试运行以下基本示例,看看控制台是否能接收到日志输出: ```python import logging # 创建一个logger实例 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 添加一个到控制台的handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) logger.addHandler(console_handler) # 开始记录 logger.info('This is a log message.') ``` 如果上述代码在你的环境下无法正常工作,那么检查上述提到的问题,找出具体原因。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值