Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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-Logger支持多个文件_Python_Python 2.7_Logging - Fatal编程技术网

Python-Logger支持多个文件

Python-Logger支持多个文件,python,python-2.7,logging,Python,Python 2.7,Logging,我创建了一个名为log.py的模块,其中有一个函数定义如何注册日志。这是原子代码: import logging import time def set_up_log(): """ Create a logging file. """ # # Create the parent logger. # logger = logging.getLogger(__name__) logger.setLevel(logging.INFO)

我创建了一个名为log.py的模块,其中有一个函数定义如何注册日志。这是原子代码:

import logging
import time

def set_up_log():
    """
    Create a logging file.
    """ 
    #
    # Create the parent logger.
    #
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    #
    # Create a file as handler.
    #
    file_handler = logging.FileHandler('report\\activity.log')
    file_handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(filename)s - %(name)s - %  (levelname)4s - %(message)s')
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    #
    # Start recording.
    #
    logger.info('______ STARTS RECORDING _______')

if __name__=='__main__':
    set_up_log()
另一个名为read_file.py的模块正在使用此log.py记录潜在错误

import logging
import log
log.set_up_log()
logger = logging.getLogger(__name__)


def read_bb_file(input_file):
    """
    Input_file must be the path.
    Open the source_name and read the content. Return the result.
    """
    content = list()
    logger.info('noi')
    try:
        file = open(input_file, 'r')
    except IOError, e:
        logger.error(e)
    else:
        for line in file:
            str = line.rstrip('\n\r')
            content.append(str)
        file.close()
        return content

if __name__ == "__main__":
    logger.info("begin execution")
    c = read_bb_file('textatraiter.out')
    logger.info("end execution")
在命令提示符lauchingread_file.py中,我发现以下错误:

找不到记录器“\uuuu main\uuuuu”的处理程序

我在文件中的结果如下

2014-05-12 13:32:58690-log.py-log-INFO-开始录制

我在这里和Py Doc上读了很多主题,但似乎我没有正确理解它们,因为我有这个错误。
我补充说,我希望将日志结算装置保留在一个函数中,而不是在我的主方法中明确定义它。

您有两个不同的记录器,并且只配置了一个

第一个是在
log.py
中创建并正确设置的。但是,它的名称将是
log
,因为您已从
read_file.py
导入此模块。 第二个记录器,即您希望与第一个记录器相同的记录器,是您在
read\u file.py
中为变量
logger
指定的记录器。它的名称将是
\uuuuu main\uuuu
,因为您是从命令行调用此模块的。您没有配置此记录器

您可以做的是将一个参数添加到
set\u-up\u-log
以传入记录器的名称,例如

def set_up_log(logname):

    logger = logging.getLogger(logname)
这样,您将为正确的日志实例设置处理程序和格式化程序


在层次结构中组织日志是模块的原始作者Vinay Sajip打算使用的日志记录方式。因此,您的模块将只使用完全限定的名称登录到日志实例,如
所示。然后您的应用程序代码可以设置记录器,这就是您试图通过
set\u up\u log
功能实现的。你只需要记住把相关的名字传给它,就这样。我当时觉得非常有用。

它完美地回答了这个问题,第二个记录器确实没有配置!谢谢,我最终在您的链接上选择了解决方案,在log.py文件中设置了一个根记录器,在read_file.py中设置了一个参数为“name”的记录器,而不是function@阿列克桑,那么请考虑“接受”答案,这是解决问题的常用方式。