[英]Python logging into several files across several modules
我正在处理如何在我的项目(例如myApp)中设置日志记录的任务。 它由几个模块和文件组成,我想创建一些基本的记录模式。 所有日志应位于/var/log/myApp
。 该目录应包含文件,例如user_errors.log
和errors.log
。 这两个文件的格式都与日期,文件,行号等相同。现在,请考虑以下结构:
# a.py:
class A(object):
def __init__(self):
self.c = my_app.C()
...
def some_method(self)
raise MyUserError(...)
# b.py
class B(object):
...
raise MyException(...)
# c.py
class C(object):
...
raise MyException(...)
# d.py which has instances of A and B
class D(object):
...
def some_method(self):
...
except MyUserError as ue:
# log into user_error.log
except MyException as e:
# log into error.log
主要方法是根据异常类型将已违反的任何异常记录到不同的文件中。 记录违反异常的名称和行号也很重要。我以为我会创建一些myLogger类,该类将以某种方式扩展logging
模块,但我还没有找到任何好的示例来实现此目的。 我已经阅读了本教程,所以我知道如何格式化输出等等。 预先感谢您的帮助!
如果要在某个集中位置(或几个集中位置)捕获所有错误,则可以只使用两个带有单独处理程序的单独记录器。
log = logging.getLogger('errors')
userlog = logging.getLogger('user_errors')
error_handler = logging.FileHandler('/var/log/myApp/errors.log')
usererror_handler = logging.FileHandler('/var/log/myApp/user_errors.log')
log.addHandler(error_handler)
userlog.addHandler(usererror_handler)
def some_method(self):
...
except MyUserError as ue:
# log into user_error.log
userlog.exception('User Error')
except MyException as e:
# log into error.log
log.exception('Error')
如果您要处理许多不同的异常和文件,则可以这样创建它们
LOGGERS = {}
def create_loggers():
logdir = '/var/log/appData'
exceptions = [
(MyError, 'errors.log'),
(MyUserError, 'user_errors.log'),
(OtherError, 'other.log')
]
for exc, fn in exceptions:
logger = logging.getLogger(exc.__name__)
hdlr = logging.FileHandler(os.path.join(logdir, fn))
logger.addHandler(hdlr)
LOGGERS[exc] = logger
create_loggers()
然后在您的例外处理程序代码中
except OtherException:
LOGGERS[OtherException].exception('Error')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.