我正在处理如何在我的项目中设置日志记录的任务,例如对myApp。它由几个模块和文件组成,我想为日志记录创建一些基本模式。所有日志都应位于/var/log/myApp
。该目录应包含文件,例如user_errors.log
和errors.log
。这两个文件将具有相同的格式模式,包括日期,文件,lineno等。现在请考虑以下结构:
# 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
模块,但我还没有找到任何好的例子如何做到这一点。我已经阅读了教程,所以我知道如何格式化输出等等。提前感谢您的帮助!
答案 0 :(得分:1)
如果您在某个集中位置(或几个集中位置)捕获所有错误,您可以使用两个单独的记录器和单独的处理程序。
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()
然后在你的例外hanlder代码中
except OtherException:
LOGGERS[OtherException].exception('Error')