2

我正在尝试仅将 ERROR/CRITICAL 重定向到 file1,并将 DEBUG 重定向到 file2

我正在尝试以下方法。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(module)s %(message)s'
        },
        'simple' : {
            'format': '%(levelname)s %(message)s'
        }
    },
    'handlers': {
        'fDebugHandler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file1.log'
        },

        'fErrorHandler': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file2.log'
        },
    },

    'loggers': {
        'vpe_default': {
            'handlers': ['fDebugHandler', 'fErrorHandler'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

这里的问题是file1中的所有调试信息,也出现在file2中。由于记录器级别,这很明显。

有没有办法获得像只有DEBUG或只有ERROR & DEBUG这样的功能

4

1 回答 1

0

您可以编写自己的过滤器(更多信息来自python 文档)。

从文档中,您可以执行以下操作:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(module)s %(message)s'
        },
        'simple' : {
            'format': '%(levelname)s %(message)s'
        }
    },
    'filters': {
        'excludedebugmsgs': {
            '()': 'yourproject.logging.ExcludeDebug',
        }
    },
    'handlers': {
        'fDebugHandler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file1.log'
        },

        'fErrorHandler': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file2.log',
            'filters': ['excludedebugmsgs']
        },
    },

    'loggers': {
        'vpe_default': {
            'handlers': ['fDebugHandler', 'fErrorHandler'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

然后你需要yourproject.logging.ExcludeDebug根据python 文档编写

Django 文档中有一些示例

于 2013-11-14T16:38:45.593 回答