[英]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.