Python 从一个具有不同级别的处理程序创建两个单独的日志文件
我有一个大项目,我想用python日志模块向其中添加日志记录 我想要的是:在main.Log中记录所有级别(调试及以上),其他日志文件从main.Log中获取特定级别(我想要的是关键级别和错误级别),并将其记录在sub.Log中 因此,main.log将记录每个级别(调试及以上), 和sub.log仅记录临界和错误级别 最好的方法是什么,我想到的是:Python 从一个具有不同级别的处理程序创建两个单独的日志文件,python,file,logging,Python,File,Logging,我有一个大项目,我想用python日志模块向其中添加日志记录 我想要的是:在main.Log中记录所有级别(调试及以上),其他日志文件从main.Log中获取特定级别(我想要的是关键级别和错误级别),并将其记录在sub.Log中 因此,main.log将记录每个级别(调试及以上), 和sub.log仅记录临界和错误级别 最好的方法是什么,我想到的是: 执行一个函数,该函数将遍历main.log并搜索行中是否有任何(严重或错误级别),复制它并将其粘贴到sub.log(但我担心这将没有效率,因为我
- 执行一个函数,该函数将遍历main.log并搜索行中是否有任何(严重或错误级别),复制它并将其粘贴到sub.log(但我担心这将没有效率,因为我可能有数百行)
您应该向日志记录器添加第二个处理程序,并使用
日志记录
机制来处理一切:
def log(name, file_name=LOGFILE, level=logging.DEBUG):
file_name = PATH + file_name
logger = logging.getLogger(name)
logger.setLevel(level)
formatter = logging.Formatter(FORMAT, TIME_FORMAT)
# build and add main handler
file_h = logging.FileHandler(file_name)
file_h.setFormatter(formatter)
logger.addHandler(file_h)
# build and add sub handler
file_h = logging.FileHandler('sub_' + file_name)
file_h.setFormatter(formatter)
file_h.set_level(logging.ERROR)
logger.addHandler(file_h)
return logger
这是一个很好的答案,我还有一个问题,我可以添加这样的内容吗:在sub.log中发现错误后,我想知道这个错误在main.log中发生的确切位置,这样我就可以跟踪它并找出应用程序中发生了什么。@MoaazAlnouri:不直接,但使用时间戳,很容易在日志文件中找到一行,最后一个问题:D,你认为这是记录日志的好方法吗(创建两个日志文件,一个用于所有级别,另一个仅用于错误和关键级别,以便我们可以轻松找到是否有错误)@MoaazAlnouri:你自找的;-)顺便说一句,这并不常见,因为像grep这样的工具非常擅长从日志文件中提取数据。但是,当调试日志很快变得非常大时,就会使用它:普通配置只记录错误及以上,当出现问题时,会将日志配置调整为在调试级别的备用日志文件中记录一段短时间。无论如何,这取决于您的实际用例和过程……非常感谢,这真的很有帮助。
# From random module.py
from logger import *
add_log = log(__name__)
# **I don't** want to make other object from the function just one.
def foo():
# do something
add_log.info("done correctly") # This will be logged in Main log Only
add_log.erorr("There is an error") # This will be logged in Main.log And Sub.log TOO
if __name__ == '__main__':
foo()
def log(name, file_name=LOGFILE, level=logging.DEBUG):
file_name = PATH + file_name
logger = logging.getLogger(name)
logger.setLevel(level)
formatter = logging.Formatter(FORMAT, TIME_FORMAT)
# build and add main handler
file_h = logging.FileHandler(file_name)
file_h.setFormatter(formatter)
logger.addHandler(file_h)
# build and add sub handler
file_h = logging.FileHandler('sub_' + file_name)
file_h.setFormatter(formatter)
file_h.set_level(logging.ERROR)
logger.addHandler(file_h)
return logger