2

ログのすべての行にsession_keyが含まれるように、Djangoのログを構成しようとしています(設定されている場合)。私は方法を見つけたと思います:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'request': {
            'format': '%(asctime)s %(levelname)-8s [%(sessid)s] %(message)s',
        },
    },
    'filters': {
        'request': {
            '()': 'yellowballs.yblogging.RequestFilter'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'filters': ['request'],
            'formatter': 'request',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

フィルタが次のように定義されている場合:

class RequestFilter(logging.Filter):
    def filter(self, record):
        session_store = SessionStore()
        record.sessid = session_store.session_key
        return True

うまく機能しているようですが、Djangoはデフォルトの形式でメッセージをログに記録しています。

2013-03-01 08:44:41,359 WARNING  [None] Not Found: /
[01/Mar/2013 08:44:41] "GET / HTTP/1.1" 200 1962

[01/Mar/2013 08:44:41] "GET / HTTP/1.1" 200 1962ログの残りの部分と同じ形式で行を表示するにはどうすればよいですか?

ログメッセージがプロジェクト全体で一貫するように、すべてのDjangoのデフォルト形式をオーバーライドする簡単できれいな方法はありますか?

4

3 に答える 3

0

これらの行は、アプリケーションではなくmanage.py runserverサーバーによって記録されているようです。そのため、それらをフォーマットする方法はなく、代わりにアプリケーション ログをいくつかのファイルに記録します。これらの行はアプリケーションログから完全に削除されますが、そこに属していないため問題ありません:)

于 2013-03-06T08:54:44.563 に答える
0

フォーマッタを使用するのを忘れたと思います:

'handlers': {
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'filters': ['set_sessid'],
        'formatter': 'request', // this
    },
},
于 2013-03-01T10:42:51.037 に答える
0

デフォルトのログ形式をオーバーライドするとうまくいきました。伝播を停止する必要があります。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        "verbose": {
            "format": (
                "%(levelname)s %(name)s %(message)s [PID:%(process)d:%(threadName)s]"
            )
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'django.server': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False, ### NOTE HERE !!!
        }
    }
}
于 2020-11-24T13:57:56.613 に答える