Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django一致的自定义日志格式_Python_Django_Logging - Fatal编程技术网

Python Django一致的自定义日志格式

Python Django一致的自定义日志格式,python,django,logging,Python,Django,Logging,我正在尝试为Django配置日志记录,以便在日志的每一行中都有session_键(如果已设置)。我想我找到了一个方法: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'request': { 'format': '%(asctime)s %(levelname)-8s [%(sessid)s] %(message)s',

我正在尝试为Django配置日志记录,以便在日志的每一行中都有session_键(如果已设置)。我想我找到了一个方法:

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:41359未找到警告[无]:/
[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的默认格式,以便日志消息在整个项目中保持一致?

我认为您忘记使用格式化程序了:

'handlers': {
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'filters': ['set_sessid'],
        'formatter': 'request', // this
    },
},

这些行似乎不是由我的应用程序记录的,而是由
manage.py runserver
server记录的。因此,没有办法格式化它们,而是将应用程序日志记录到一些文件中。这将从应用程序日志中完全删除这些行,但这没关系,因为它们不属于应用程序日志:)

覆盖适用于我的默认日志格式。需要停止传播

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 !!!
        }
    }
}

是的,现在我已经更改了它并更正了问题,但它并没有解决问题-Django的日志消息仍然采用不同的格式尝试将Django logger的级别更改为INFO或DEBUG。您看到的日志条目通过主“django”记录器,您有最小错误级别设置OK,更改了它,但也没有帮助;仍在使用这些行:
[01/Mar/2013 02:41:33]“GET/HTTP/1.1”200 1962