Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File_Logging - Fatal编程技术网

Python 从一个具有不同级别的处理程序创建两个单独的日志文件

Python 从一个具有不同级别的处理程序创建两个单独的日志文件,python,file,logging,Python,File,Logging,我有一个大项目,我想用python日志模块向其中添加日志记录 我想要的是:在main.Log中记录所有级别(调试及以上),其他日志文件从main.Log中获取特定级别(我想要的是关键级别和错误级别),并将其记录在sub.Log中 因此,main.log将记录每个级别(调试及以上), 和sub.log仅记录临界和错误级别 最好的方法是什么,我想到的是: 执行一个函数,该函数将遍历main.log并搜索行中是否有任何(严重或错误级别),复制它并将其粘贴到sub.log(但我担心这将没有效率,因为我

我有一个大项目,我想用python日志模块向其中添加日志记录

我想要的是:在main.Log中记录所有级别(调试及以上),其他日志文件从main.Log中获取特定级别(我想要的是关键级别和错误级别),并将其记录在sub.Log

因此,main.log将记录每个级别(调试及以上), 和sub.log仅记录临界和错误级别

最好的方法是什么,我想到的是:

  • 执行一个函数,该函数将遍历main.log并搜索行中是否有任何(严重或错误级别),复制它并将其粘贴到sub.log(但我担心这将没有效率,因为我可能有数百行)
这是logger.py

在这里,我调用函数并创建一个对象,然后开始记录: module2.py:


您应该向日志记录器添加第二个处理程序,并使用
日志记录
机制来处理一切:

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