【问题标题】:In python I can write a log to console but its not getting written into file在python中,我可以将日志写入控制台,但不会写入文件
【发布时间】:2020-04-10 13:34:08
【问题描述】:
import logging 
#Create and configure logger 
logging.basicConfig(filename="newfile.txt", format='%(asctime)s %(message)s',filemode='w') 
logging.debug("Harmless debug Message") 
logging.info("Just an information") 
logging.warning("Its a Warning") 
logging.error("Did you try to divide by zero") 
logging.critical("Internet is down") 

在控制台中打印所有这些信息。它从未写入文件。真的很感谢那些帮助我解决这个问题的人。从早上开始在互联网上搜索尝试了所有可能性,但日志仍然没有写入文件

【问题讨论】:

  • 级别是 logging.INFO,我也将其保留为 logging.WARNING 但没有希望。它在控制台中打印,但不会写入文件

标签: python logging python-logging


【解决方案1】:

使用所需的流和文件处理程序创建一个新的记录器:

import logger, sys
logger = logging.Logger('AmazeballsLogger')
#Stream/console output
logger.handler = logging.StreamHandler(sys.stdout)
logger.handler.setLevel(logging.WARNING)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
logger.handler.setFormatter(formatter)
logger.addHandler(self.handler)
#File output
fh = logging.FileHandler("test.log")
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
logger.addHandler(fh)

你已经准备好试一试了:

print(logger.handlers)

logger.critical("critical")
logger.error("error")
logger.warning("warning")
logger.info("info")
logger.debug("debug")

以下控制台输出仅显示 WARNING 及更高版本:

[<StreamHandler stdout (WARNING)>, <FileHandler C:\Users\...\test.log (DEBUG)>]
2020-04-13 17:52:57,729 - CRITICAL - critical
2020-04-13 17:52:57,731 - ERROR - error
2020-04-13 17:52:57,734 - WARNING - warning

而 test.log 包含所有级别:

2020-04-13 17:52:57,729 - AmazeballsLogger - CRITICAL - critical
2020-04-13 17:52:57,731 - AmazeballsLogger - ERROR - error
2020-04-13 17:52:57,734 - AmazeballsLogger - WARNING - warning
2020-04-13 17:52:57,736 - AmazeballsLogger - INFO - info
2020-04-13 17:52:57,736 - AmazeballsLogger - DEBUG - debug

关键是要了解logging handlers 的工作原理并检查它们是否使用了正确的级别(如上面的代码单元中,只需打印 logger.handlers)。此外,覆盖基本配置是一种不好的做法,当您在同一个 python 环境中运行多个记录器时可能会导致问题。我推荐this video,它揭示了python日志中的流/文件处理程序。

【讨论】:

  • 你的答案是正确的,但是导入日志而不是记录器,并且不要使用 self.handler。干杯
【解决方案2】:

我从日志记录文档中得到了这个例子

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='myapp.log',
                    filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

以及我在网上看到的示例,它们都在创建.logfile。所以尝试将文件的扩展名从txt更改为log

【讨论】:

  • 我没有看到日志文件,只打印到tty tho
猜你喜欢
  • 2021-07-26
  • 2017-08-27
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2015-01-17
  • 1970-01-01
相关资源
最近更新 更多