【问题标题】:How to write logging messages to a file如何将日志消息写入文件
【发布时间】:2020-01-02 21:47:26
【问题描述】:

我正在尝试使用 Python logging 库。我不想在控制台中打印消息,而是将它们写入文件。基于 documentation ,我有点不确定如何做到这一点。首先我导入了logging,然后我创建了我的日志对象。注意:执行此操作时,我有点不确定name 参数。这是否假设是具有完整文件路径的文件名?我随便编的名字?

foldname = "chk_logs"
logFileName = os.path.join(path.abspath(path.curdir),foldname + "\\Fields_Log_" + timeStamp + ".txt")             #logging
if os.path.isdir(foldname)==False:
    os.mkdir(foldname)
logFile = open(logFileName, "w")

format="%(asctime)s [%(levelname)s] %(message)s"
logging.basicConfig(fileName=logFile, format=format, level=10)
logger = logging.getLogger('name')  

所以,假设我想从我的loggerlogFile 写一条消息。

   logger.debug("Test")

这基本上没有任何作用,即使在我使用logFile.close() 之后也是如此。如果我试试这个:

logFile.write(str(logger.debug("Test")))

它基本上在.txt 文件中写入“无”。必须有一个简单的方法来做到这一点;我做错了什么?

【问题讨论】:

  • 使用fileName=logFileName,不要自己处理文件。 logger.debug("Test") 将写入日志文件,除此之外无需执行任何操作。顺便说一句,logger.{debug,info,warning,error} 方法不会返回,这就是您在文件中看到 None 的原因。

标签: python python-2.7 logging file-handling file-writing


【解决方案1】:

这是我经常用于 Python 日志记录的一些样板代码。这适用于 Windows。如果您使用的是 UNIX,则需要将正斜杠更改为反斜杠

import os
import logging
import datetime as dt
import time

LOG_FILE = os.getcwd() + "/logs"
if not os.path.exists(LOG_FILE):
    os.makedirs(LOG_FILE)
LOG_FILE = LOG_FILE + "/" + dt.datetime.fromtimestamp(time.time()).strftime('%Y_%m_%d %H_%M_%S') + ".log"
logFormatter = logging.Formatter("%(levelname)s %(asctime)s %(processName)s %(message)s")
fileHandler = logging.FileHandler("{0}".format(LOG_FILE))
fileHandler.setFormatter(logFormatter)
rootLogger = logging.getLogger()
rootLogger.addHandler(fileHandler)
rootLogger.setLevel(logging.INFO)

logging.info("testing out the logging functionality")

您最终应该得到一个带有日期时间戳的日志文件

【讨论】:

  • 这完全有效。我不太明白为什么我的代码不起作用。是因为你必须有一个fileHandler吗?使用'name' 搞砸了吗?我使用.txt 而不是.log 有关系吗?我仍然很困惑,但您的解决方案在我的代码中有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多