python的日志记录模块未记录到日志文件

时间:2014-04-18 17:03:06

标签: python

我正在尝试使用python的logger模块在控制台和日志中记录信息并且它工作正常。我希望在机器star-tup期间调用该脚本,因此从rc.local调用我的脚本。

我的脚本在启动时被调用,但问题是,当时只有控制台日志记录正在运行。记录到文件没有发生。关于可能是什么问题的任何线索。

是否与syslog守护进程有关?

import time
import logging
import datetime

global logger
global LOG_FILE

def initialize():
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)

    time = datetime.datetime.now()
    LOG_FILE = "sample.log." + time.strftime("%Y%m%d")
    log_file_handler = logging.FileHandler(LOG_FILE)
    log_file_handler.setLevel(logging.DEBUG)
    log_file_formatter = logging.Formatter('%(message)s')
    log_file_handler.setFormatter(log_file_formatter)
    logger.addHandler(log_file_handler)

    log_file_handler = logging.StreamHandler()
    log_file_handler.setLevel(logging.INFO)
    log_file_formatter = logging.Formatter('%(message)s')
    log_file_handler.setFormatter(log_file_formatter)    
    logger.addHandler(log_file_handler)


if __name__ == '__main__':
    initialize()
    logger.info("This should go both in console and log")
    logger.debug("This should go only to Log")

1 个答案:

答案 0 :(得分:1)

import time
import logging
import datetime

def initialize():
    # because logging is global module, so you can 
    # always get logger by logging.getLogger(__name__)
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)

    time = datetime.datetime.now()
    # if you only use LOG_FILE in function, you don't
    # have to declare it outside.
    LOG_FILE = "sample.log." + time.strftime("%Y%m%d")
    log_file_handler = logging.FileHandler(LOG_FILE)
    log_file_handler.setLevel(logging.DEBUG)
    log_file_formatter = logging.Formatter('%(message)s')
    log_file_handler.setFormatter(log_file_formatter)
    logger.addHandler(log_file_handler)

    log_file_handler = logging.StreamHandler()
    log_file_handler.setLevel(logging.INFO)
    log_file_formatter = logging.Formatter('%(message)s')
    log_file_handler.setFormatter(log_file_formatter)
    logger.addHandler(log_file_handler)


if __name__ == '__main__':
    initialize()
    logger = logging.getLogger(__name__)
    logger.info("This should go both in console and log")
    logger.debug("This should go only to Log")