簡體   English   中英

Python跨多個模塊登錄到多個文件

[英]Python logging into several files across several modules

我正在處理如何在我的項目(例如myApp)中設置日志記錄的任務。 它由幾個模塊和文件組成,我想創建一些基本的記錄模式。 所有日志應位於/var/log/myApp 該目錄應包含文件,例如user_errors.logerrors.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM