在 Pycharm 下运行 django 测试的日志输出

Arn*_*sen 11 django logging unit-testing pycharm

django.test.TestCase在 PyCharm 下运行/调试单个测试时,不会显示 logging.logger 消息。我已经尝试logging.basicConfig(level=logging.DEBUG)按照在 PyCharm 中进行单元测试时如何查看日志消息的建议进行设置但这也无济于事。我怀疑这可能是 django 的TestCase设置干扰。

在测试设置或运行器配置中是否有其他方法可以为测试运行打开调试日志记录?

我现在在 settings.py 中设置的日志记录是:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/em/mcqueen-dev.log',
            'when': 'midnight',
            'formatter': 'verbose',
        },
    },
    'formatters': {
        'verbose': {
            'format': '%(asctime)s.%(msecs).03d - %(process)d - %(thread)d - %(levelname)8s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s'
        },
        'simple': {
            'format': '%(asctime)s - %(levelname)s %(message)s'
        },
    },
    'loggers': {
        'mcqueen_api': {
            'handlers': ['console', 'file'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG')
        },
        'mcqueen_app': {
            'handlers': ['console', 'file'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG')
        },
        'mcqueen_base': {
            'handlers': ['console', 'file'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG')
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

izk*_*ros 7

当我想在 PyCharm 中对 Django 项目进行测试时查看日志时,我将此代码片段放入带有测试的文件中:

import logging
logger = logging.getLogger(__name__)
logging.disable(logging.NOTSET)
logger.setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

虽然运行 Django 测试级别以禁用日志设置为高(至 50),但降低它(如上面代码中的第 3 行)将导致显示日志(或保存到文件 - 取决于正在使用的日志处理程序) .


Sơn*_*Lâm 2

我想这会起作用的

settings.py 上的日志配置

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
    'format': "[%(asctime)s] %(levelname)s %(message)s",
                'datefmt': "%d/%b/%Y %H:%M:%S"
            }
        },
        'handlers': {
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/var/log/django_practices.log',
                'formatter': 'verbose'
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'stream': sys.stdout,
                'formatter': 'verbose'
            },
        },
        'loggers': {

            'django_test': {
                'handlers': ['file', 'console'],
                'level': 'DEBUG',
            },
            'name_your_app': {
                'handlers': ['file', 'console'],
                'level': 'DEBUG',
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

在单元测试文件中

import logging
logger = logging.getLogger('django_test')
logger.info('test_log')
Run Code Online (Sandbox Code Playgroud)

并且Log将会出现。