Python 即使使用RotatingFileHandler,Django也可以同时记录多个文件?

Python 即使使用RotatingFileHandler,Django也可以同时记录多个文件?,python,django,python-3.x,django-rest-framework,python-logging,Python,Django,Python 3.x,Django Rest Framework,Python Logging,我将Django与日志配置一起使用,如下所示: LOGGING = { 'version':1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{asctime} {process:d} {thread:d} {levelname} {name} {module} {funcName} {message}',

我将Django与日志配置一起使用,如下所示:

LOGGING = {
    'version':1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{asctime} {process:d} {thread:d} {levelname} {name} {module} {funcName} {message}',
            'style': '{',
        }
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': BASE_DIR+'/logs/django_logs.log',
            'backupCount': 14,
            'maxBytes': 52428800,
            'formatter': 'verbose'
        }
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'INFO'
        }
    },
}
import logging
logger = logging.getLogger(__name__)
我正在运行django的16个进程,WebSocket的daphne和基于django rest框架的普通API调用的gunicorn进程很少。但当我查看日志时,会同时记录多个文件。例如,django_logs.1。。。。django.logs.14正在同时登录。我是否必须一次将其他内容添加到一个文件中,并且仅当其大小超过日志文件的指定大小时才对其进行旋转

为了获得更多信息,我正在使用python 3.6.8,并在每个项目文件中初始化记录器,如下所示:

LOGGING = {
    'version':1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{asctime} {process:d} {thread:d} {levelname} {name} {module} {funcName} {message}',
            'style': '{',
        }
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': BASE_DIR+'/logs/django_logs.log',
            'backupCount': 14,
            'maxBytes': 52428800,
            'formatter': 'verbose'
        }
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'INFO'
        }
    },
}
import logging
logger = logging.getLogger(__name__)
发件人:

虽然日志记录是线程安全的,但是从 支持单个进程中的多个线程,将日志记录到单个进程 不支持来自多个进程的文件,因为没有 跨多个文件序列化访问单个文件的标准方法 Python中的进程。如果您需要从多个站点登录到单个文件 进程,一种方法是将所有进程记录到 ,并具有实现套接字的单独进程 从套接字读取数据并记录到文件的服务器。如果你愿意, 您可以在现有进程之一中将一个线程专用于 执行此功能

烹饪书中还详细介绍了这种方法的完整示例

文件还建议了几种替代方法:

或者,您可以使用队列和 将事件记录到多进程中的一个进程 应用

我已经测试了您的日志记录配置,当一个唯一的进程记录到文件处理程序时,它会按预期工作。仅当从以下位置达到maxBytes时,文件才应旋转:

虽然日志记录是线程安全的,但是从 支持单个进程中的多个线程,将日志记录到单个进程 不支持来自多个进程的文件,因为没有 跨多个文件序列化访问单个文件的标准方法 Python中的进程。如果您需要从多个站点登录到单个文件 进程,一种方法是将所有进程记录到 ,并具有实现套接字的单独进程 从套接字读取数据并记录到文件的服务器。如果你愿意, 您可以在现有进程之一中将一个线程专用于 执行此功能

烹饪书中还详细介绍了这种方法的完整示例

文件还建议了几种替代方法:

或者,您可以使用队列和 将事件记录到多进程中的一个进程 应用

我已经测试了您的日志记录配置,当一个唯一的进程记录到文件处理程序时,它会按预期工作。仅当达到最大字节数时,文件才应旋转