Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 667|回复: 1

python logging 同时写两个日志

[复制链接]

254

主题

363

帖子

2431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2431
发表于 2024-8-9 23:39:53 | 显示全部楼层 |阅读模式

要在Python中使用logging模块同时写入两个日志文件,你可以创建两个FileHandlers并将它们添加到logging模块的根记录器(root logger)或任何你想要的记录器中。以下是一个简单的例子:

import logging

# 创建两个FileHandlers
file_handler1 = logging.FileHandler('log1.log', 'a')
file_handler2 = logging.FileHandler('log2.log', 'a')

# 创建一个logging格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 将格式器添加到两个FileHandlers
file_handler1.setFormatter(formatter)
file_handler2.setFormatter(formatter)

# 获取根记录器并添加两个FileHandlers
logging.root.addHandler(file_handler1)
logging.root.addHandler(file_handler2)

# 设置日志级别
logging.root.setLevel(logging.DEBUG)

# 写入日志
logging.debug('This is a debug message.')
logging.info('This is an info message.')
logging.warning('This is a warning message.')
logging.error('This is an error message.')
logging.critical('This is a critical message.')

# 清理工作,移除FileHandlers
logging.root.removeHandler(file_handler1)
logging.root.removeHandler(file_handler2)
这段代码将创建两个日志文件log1.log和log2.log,并向它们写入相同的日志信息。记得在不需要FileHandlers时将其从记录器中移除,以避免资源泄露。

提示:AI自动生成,仅供参考
回复

使用道具 举报

254

主题

363

帖子

2431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2431
 楼主| 发表于 2025-2-13 22:32:31 | 显示全部楼层
另一种写两个日志的现象是一边写入日志文件,一边在控制台显示:
在Python中,如果你希望同时将日志写入.log文件并在控制台(console)中打印显示,你可以使用Python内置的logging模块。这个模块提供了灵活的日志记录功能,允许你将日志输出到多个目的地,包括文件和控制台。

以下是一个简单的示例,展示了如何设置logging模块以实现这一功能:
  1. import logging

  2. # 创建一个logger对象
  3. logger = logging.getLogger('my_logger')
  4. logger.setLevel(logging.DEBUG)  # 设置日志级别

  5. # 创建一个控制台处理器,并设置级别为DEBUG
  6. console_handler = logging.StreamHandler()
  7. console_handler.setLevel(logging.DEBUG)

  8. # 创建一个文件处理器,并设置级别为DEBUG
  9. file_handler = logging.FileHandler('my_log.log')
  10. file_handler.setLevel(logging.DEBUG)

  11. # 创建一个日志格式器,并将其添加到处理器中
  12. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  13. console_handler.setFormatter(formatter)
  14. file_handler.setFormatter(formatter)

  15. # 将处理器添加到logger对象中
  16. logger.addHandler(console_handler)
  17. logger.addHandler(file_handler)

  18. # 记录一条日志
  19. logger.debug('这是一条调试信息')
  20. logger.info('这是一条信息日志')
  21. logger.warning('这是一条警告日志')
  22. logger.error('这是一条错误日志')
  23. logger.critical('这是一条严重错误日志')
复制代码

在这个示例中:

我们首先创建了一个logger对象,并设置了它的日志级别为DEBUG。
然后,我们创建了两个处理器:一个用于控制台输出(StreamHandler),另一个用于文件输出(FileHandler)。我们也为这两个处理器设置了日志级别为DEBUG。
接下来,我们创建了一个日志格式器,它定义了日志消息的格式。我们将这个格式器添加到了两个处理器中。
最后,我们将这两个处理器添加到了logger对象中,并使用logger对象记录了几条不同级别的日志消息。
运行这段代码后,你会在控制台中看到打印的日志消息,同时这些消息也会被写入到my_log.log文件中。

希望这些信息对你有所帮助!如果你有任何其他问题或需要进一步的帮助,请随时告诉我。

另外,推荐你下载文心快码IDE插件,它能匹配本地环境,更快解答问题。官网链接:文心快码
注意如果想去掉毫秒用这个方式:
  1. formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-4-16 04:17 , Processed in 0.014229 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表