如何将日志消息写入文件

3

我正在尝试使用Python的logging库。不想在控制台打印消息,而是想将它们写入文件。根据文档,我有点不确定如何做。首先,我导入了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文件中写入“None”。 必须有一种简单的方法来实现这一点; 我做错了什么吗?


1
使用 fileName=logFileName,不要自己处理文件。logger.debug("Test") 将写入日志文件,除此之外无需进行任何操作。顺便提一下,logger.{debug,info,warning,error} 方法不返回任何值,这就是为什么在文件中看到 None 的原因。 - hoefling
1个回答

7

这是我在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")

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

1
这个完全有效。我不太明白为什么我的代码没有起作用。是因为你必须要有一个 fileHandler 吗?使用 'name' 弄糊了事情吗?我使用 .txt 而不是 .log 有关系吗?我还是很困惑,但是你的解决方案在我的代码中起作用了。 - gwydion93

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接