Python-Logger支持多个文件
我创建了一个名为log.py的模块,其中有一个函数定义如何注册日志。这是原子代码: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)
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@阿列克桑,那么请考虑“接受”答案,这是解决问题的常用方式。