こんにちは
それは最高?独自のロギングレベルの独自のログメソッドを作成する方法
私のオリジナルの願いはstdoutにルート・ファイルへすべてを書いロガー、さらに名前のロガー(「rrcheck」)書き込みを持つことであるが、後者はまた、いくつかの他の方法とのレベルを持っている必要があります。 "!PFXWRN"という接頭辞を付けたメッセージを追加する必要があります(ただし、標準出力に行く人のみ)。他のメッセージは変更しないでください。また、ログレベルをと別に設定すると、がrootとnamed loggerになります。
これは私のコードです:
class CheloExtendedLogger(logging.Logger):
"""
Custom logger class with additional levels and methods
"""
WARNPFX = logging.WARNING+1
def __init__(self, name):
logging.Logger.__init__(self, name, logging.DEBUG)
logging.addLevelName(self.WARNPFX, 'WARNING')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter("%(asctime)s [%(funcName)s: %(filename)s,%(lineno)d] %(message)s")
console.setFormatter(formatter)
# add the handlers to logger
self.addHandler(console)
return
def warnpfx(self, msg, *args, **kw):
self.log(self.WARNPFX, "! PFXWRN %s" % msg, *args, **kw)
logging.setLoggerClass(CheloExtendedLogger)
rrclogger = logging.getLogger("rrcheck")
rrclogger.setLevel(logging.INFO)
def test():
rrclogger.debug("DEBUG message")
rrclogger.info("INFO message")
rrclogger.warnpfx("warning with prefix")
test()
そして、これが出力されます - 機能とlilne番号が間違っている:代わりにテストのwarnpfx
2011-02-10 14:36:51,482 [test: log4.py,35] INFO message
2011-02-10 14:36:51,497 [warnpfx: log4.py,26] ! PFXWRN warning with prefix
はたぶん自分のロガーのアプローチがあります最高のものではない?
あなたはどのような方向に行くと思いますか(独自のロガー、ハンドラ、独自のフォーマッタなど)?
さらに別のロガーを希望する場合はどうすればいいですか?
生憎のロギングは、あなたがPython sourcesをチェックすると、あなたがいることを参照してくださいよ...そう、その後のgetLogger(名前)が必要なものを取ると、
よろしく、
ズビグニエフ
ありがとうDzinX。私はもう少し試してみましたが、self.logの代わりにself._logを呼び出すように見えます。 – Zbigniew
Aaah、それは 'currentframe()'がコールスタックの4番目のトップ関数を返すからです:)それらのどれが醜いか:) – DzinX