如何按文件大小拆分Python日志文件

时间:2014-01-26 21:31:35

标签: python django logging

我正在使用Django并且包含了Python的默认日志记录库。我有以下配置用于记录(在settings.py中):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s %(name)s-%(levelname)s (%(filename)s:%(lineno)s %(funcName)s)]: %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '[%(asctime)s %(name)s-%(levelname)s]: %(message)s',
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'file-django': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename':  os.path.join(PROJECT_LOGS, 'django.log'),
            'formatter': 'simple'
        },
        'file-application': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename':  os.path.join(PROJECT_LOGS, 'application.log'),
            'formatter': 'simple'
        },
        'file-core': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename':  os.path.join(PROJECT_LOGS, 'core.log'),
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers':['file-django'],
            'propagate': True,
            'level':'DEBUG',
        },
        'application': {
            'handlers': ['file-application'],
            'propagate': True,
            'level': 'DEBUG',
        },
        'core': {
            'handlers': ['file-core'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}

我正在尝试仅使用配置拆分结果日志文件。我“谷歌搜索”并找到了一些解决方案,但所有这些都是基于代码的。

2 个答案:

答案 0 :(得分:2)

您可以在配置文件 setting.py 中使用 logging.handlers.RotatingFileHandler ,将处理程序'file-django'作为示例并假设您将其拆分为当文件大小超过100MB时的新文件:

'file-django': {
    'level': 'DEBUG',
    'class': 'logging.handlers.RotatingFileHandler',
    'filename':  os.path.join(PROJECT_LOGS, 'django.log'),
    'maxBytes': 104857600, # 1024*1024*100B (100MB)
    'backupCount': 10, # keep at most 10 log files
    'formatter': 'simple'
},

参考:https://xxx-cook-book.gitbooks.io/django-cook-book/Logs/Handlers/FileHandler/rotating-file-handler.html

答案 1 :(得分:1)

使用Ignacio的评论和look up如何使用RotatingFileHandler;它按文件大小分割,你可以通过LOGGING字典在Django中以声明方式配置它。