Django日志,如何不将错误消息重复到不同的处理程序中?

2024-04-20 07:04:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我只尝试将ERROR/CRITICAL重定向到file1,并调试到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,
        },
    }
}

这里的问题是文件1中的所有调试信息,也出现在文件2中。这是显而易见的,因为记录器的水平。你知道吗

是否有任何方法可以获得像只调试或只错误&;调试这样的功能


Tags: 方法debugformatmessageverboselogginghandlerserror
1条回答
网友
1楼 · 发布于 2024-04-20 07:04:47

您可以编写自己的filters(更多信息来自python docs)。你知道吗

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

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

然后需要根据python docs来编写yourproject.logging.ExcludeDebug

Django文档中有一些examples。你知道吗

相关问题 更多 >