コードのロガーを使用して、Django プロジェクトから Fluentd ログ ハンドラーを設定しようとしています。
def get_fluentd_logger(name):
import logging
from fluent import handler
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(name)
logger.addHandler(handler.FluentHandler(name, host='localhost', port=24224))
return logger
handler.FluentHandler
パッケージから来て、ローカルでfluent-logger
実行しています。fluent
流暢な.conf:
<source>
type forward
port 24224
</source>
<match **>
type copy
<store>
type stdout
</store>
<store>
type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
phi_threshold 8
hard_timeout 60s
<server>
name monitoring
host 1.2.3.4
port 24224
weight 100
</server>
</store>
</match>
これを django 以外の python プロジェクトから実行すると正常に動作しますが、django から呼び出すと何もしません。
問題は、現在インストールされているロガーとそのハンドラーを確認して、この状況をデバッグできる方法はありますか?
[編集]
次のようなdjango設定から行うと:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(levelname)s: %(message)s'
},
},
'handlers': {
'fluentdebug':{
'level':'DEBUG',
'class':'fluent.handler.FluentHandler',
'formatter': 'simple',
'tag':'foo.bar.baz',
'host':'localhost',
'port':24224,
},
},
'loggers': {
'foo.bar.baz': {
'handlers': ['fluentdebug'],
'level': 'DEBUG',
'propagate': True,
},
}
}
それは機能します。ただし、コードからこれを実行できるようにしたいと考えています。これは、foo.bar.baz
多くの値を取ることができ、まったく同じことを行う 20 個のロガーとハンドラーでこのファイルを汚染したくないためです。
logging
おそらく本当の問題は、Django がセットアップを実行した後にコードからロガーを追加できないのはなぜですか?