使用Python将多个函数写入单个日志文件

2024-10-02 00:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含几个函数的Python文件。当“main”函数运行时,它会遍历函数。每个函数都需要在同一个日志文件中写入一些文本。在

我写了以下代码。在这里,每个文件都声明为全局处理程序。我想知道有没有更好的方法来达到这个目的?在

LOG_FILE_NAME = 'TestLog.log'
f = None

def log1():
    global f
    print 'log1 called'
    f.write('log1 result' + '\n')

def log2():
    global f
    print 'log2 called'
    f.write('log2 result' + '\n')

logFileDir = LOG_FILE_NAME
f = open(logFileDir, 'w')
log1()
log2()
f.close()

Tags: 文件函数namelogmaindefresultlog2
2条回答

展开汤姆·道尔顿的链接(docs.python.org/2/howto/logging.html#logging-to-a-file):

import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')

也会把这个写成一个文件

^{pr2}$

在您的示例中,您可以使用全局记录器,并且每个函数都可以调用它

import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)

def log1():
    logging.info('log1')

def log2():
    logging.info('log2')

if __name__ == '__main__':
    log1()
    log2()

如果需要多个记录器,可以使用logging.getLogger(),日志模块有很多灵活性,请查看文档(在链接中)。在

一种方法是编写自己的简单日志函数作为闭包:

def create_logger(log_filename = 'TestLog.log'):
    f = open(log_filename, 'w')

    def logger(text):
        f.write(text + '\n')

    return logger,f.close

logwrite,logclose = create_logger()

def log1():
    print 'log1 called'
    logwrite('log1 result')

def log2():
    print 'log2 called'
    logwrite('log2 result')

log1()
log2()
logclose()

它避免了使用global,封装了file对象,简化了调用,并允许您通过为每个所需的文件名调用create_logger来使用多个不同的文件名。例如,您可能希望向日志消息添加一个日期/时间戳,只需通过增强logger函数在一个地方完成。在

相关问题 更多 >

    热门问题