Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用不同设置登录到两个文件_Python_Python 3.x_Logging_Logfile - Fatal编程技术网

Python 使用不同设置登录到两个文件

Python 使用不同设置登录到两个文件,python,python-3.x,logging,logfile,Python,Python 3.x,Logging,Logfile,我已经在使用一个基本的日志配置,其中所有模块中的所有消息都存储在一个文件中。但是,我现在需要一个更复杂的解决方案: 两个文件:第一个文件保持不变 第二个文件应该有一些自定义格式 我一直在阅读模块的文档,但目前它们对我来说非常复杂。伐木工人、搬运工人 因此,简言之: 如何在Python 3中登录到两个文件,即: import logging # ... logging.file1.info('Write this to file 1') logging.file2.info('Write th

我已经在使用一个基本的日志配置,其中所有模块中的所有消息都存储在一个文件中。但是,我现在需要一个更复杂的解决方案:

  • 两个文件:第一个文件保持不变
  • 第二个文件应该有一些自定义格式
我一直在阅读模块的文档,但目前它们对我来说非常复杂。伐木工人、搬运工人

因此,简言之:

如何在Python 3中登录到两个文件,即:

import logging
# ...
logging.file1.info('Write this to file 1')
logging.file2.info('Write this to file 2')

您可以这样做:

import logging
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')


def setup_logger(name, log_file, level=logging.INFO):
    """To setup as many loggers as you want"""

    handler = logging.FileHandler(log_file)        
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)

    return logger

# first file logger
logger = setup_logger('first_logger', 'first_logfile.log')
logger.info('This is just info message')

# second file logger
super_logger = setup_logger('second_logger', 'second_logfile.log')
super_logger.error('This is an error message')

def another_method():
   # using logger defined above also works here
   logger.info('Inside method')

默认的日志级别是
logging.WARNING
,因此如果调用
Logger.setLevel(logging.WARNING)
,就会更清楚。为什么我的
Logger\u 1
不输出到日志文件?我已经设置了
logger\u 1.error('error foo')
,但仍然无法将@zeekvfu的评论和@Gank的问题结合起来。。。如果要查看
simplefile_1.log
中的
logger_1.info('message_1')
行,需要使用
logger_1.setLevel(logging.info)
将级别设置为
info
,或者改用
logger_1.error('message_1')
。当级别为
警告
时,
信息
消息显然不会被记录,这是默认值。编辑答案。将logger_1.info设置为logger_1.warning。这样,级别就不必设置。@eos87记录器_1和记录器_2是全局的吗?也就是说,我可以在任何函数中使用它们?如果不是,在def主功能中使它们成为全局的是一个好主意吗?如果是的话,你会怎么做?logger_1和logger_2是全球性的吗?也就是说,我可以在任何函数中使用它们?如果不是,在def主功能中使它们成为全局的是一个好主意吗?如果是这样的话,你会怎么做呢?你不会在def中这样做,你会在你定义记录器的任何地方这样做。这不会导致控制台输出重复吗?
def setup_logger(logger_name, log_file, level=logging.INFO):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(message)s')
    fileHandler = logging.FileHandler(log_file, mode='w')
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)

    l.setLevel(level)
    l.addHandler(fileHandler)
    l.addHandler(streamHandler)    


setup_logger('log1', txtName+"txt")
setup_logger('log2', txtName+"small.txt")
logger_1 = logging.getLogger('log1')
logger_2 = logging.getLogger('log2')




logger_1.info('111messasage 1')
logger_2.info('222ersaror foo')