使用Python

时间:2016-01-20 23:30:10

标签: python python-2.7 logging

我有一个包含一些函数的Python文件。当"主要"函数运行,它贯穿函数。每个函数都需要将一些文本写入同一个日志文件。

我写了以下代码。在每个函数中,文件处理程序在此声明为全局。我想知道是否有更好的方法来实现这一目标?

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()

2 个答案:

答案 0 :(得分:1)

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

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,封装文件对象,简化了调用,并允许您通过为每个所需的文件名调用create_logger来使用多个不同的文件名。例如,您可能希望在日志消息中添加日期/时间戳,只需通过增强logger功能在一个地方完成。

答案 1 :(得分:1)

扩展Tom Dalton的链接(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')

也会写这个文件

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
在您的示例中,您可以使用全局记录器,并且每个函数都可以调用它

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(),记录模块有很大的灵活性,请查看文档(在链接中)。