使用python日志模块将消息信息发送到一个文件并将错误发送到另一个fi

2024-04-26 23:19:25 发布

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

我发现了一些类似的例子,可以将消息记录到多个文件中。但没什么能满足我的需要。我正在使用日志记录模块,并将所有信息消息记录到控制台和一个文件中。(稍后我将关闭控制台日志记录)。在

不过,我希望将此扩展为将所有信息消息记录到文件.log以及所有错误消息文件.err. 如果可以将所有消息记录到文件.log(错误和信息)然后将所有错误消息保存到单独的文件中。在

这可能吗?在

---------在

我自己的问题显然有7个小时没法回答,所以我会更新我原来的问题。在

---------在

我现在觉得很蠢。经过几个小时的尝试,在张贴之前,我发现这个'再次'。 这就像是在阅读示例时,键入我要做的事情会触发一些东西。在

http://docs.python.org/2/howto/logging-cookbook.html

它将信息级别及以上级别的所有内容输出到一个日志文件(log_文件),然后也会打印日志记录.error以及日志记录。警告将消息发送到单独的文件(err_file)

# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.INFO,
                   format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                   filemode='w')

log_error = logging.FileHandler(err_file)
log_error.setLevel(logging.WARNING)

log_info = logging.FileHandler(log_file)
log_info.setLevel(logging.INFO)

# set a format which is simpler for console use
formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')    

# tell the handler to use this format
log_error.setFormatter(formatter)    
log_info.setFormatter(formatter)        

# add the handler to the root logger
logging.getLogger('').addHandler(log_info)
logging.getLogger('').addHandler(log_error)

Tags: 文件thetoinfolog信息format消息
2条回答

测试_日志.py:

import logging

def get_logger(    
        LOG_FORMAT     = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
        LOG_NAME       = '',
        LOG_FILE_INFO  = 'file.log',
        LOG_FILE_ERROR = 'file.err'):

    log           = logging.getLogger(LOG_NAME)
    log_formatter = logging.Formatter(LOG_FORMAT)

    # comment this to suppress console output
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(log_formatter)
    log.addHandler(stream_handler)

    file_handler_info = logging.FileHandler(LOG_FILE_INFO, mode='w')
    file_handler_info.setFormatter(log_formatter)
    file_handler_info.setLevel(logging.INFO)
    log.addHandler(file_handler_info)

    file_handler_error = logging.FileHandler(LOG_FILE_ERROR, mode='w')
    file_handler_error.setFormatter(log_formatter)
    file_handler_error.setLevel(logging.ERROR)
    log.addHandler(file_handler_error)

    log.setLevel(logging.INFO)

    return log

def main():

    my_logger = get_logger()

    my_logger.info('This is an INFO message')
    my_logger.warning('This is a WARNING message')
    my_logger.error('This is an ERROR message')


if __name__ == '__main__':
    main()

输出

^{pr2}$

一种方法是插入Filter,一个只过滤一个级别的好例子here

import logging

class InfoFilter(logging.Filter):
    def filter(self, rec):
        return rec.levelno == logging.INFO

然后Filter对象可以使用方法^{}在{}上使用

相关问题 更多 >