自定义管理命令的Django日志记录

2024-04-29 16:25:40 发布

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

我的Django项目中有一个名为main的应用程序。此应用程序有几个我要记录的管理命令,但stdout中没有显示以下配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'log_to_stdout': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            },
        },
    'loggers': {
        'main': {
            'handlers': ['log_to_stdout'],
            'level': 'DEBUG',
            'propagate': True,
            }
        }
    }

我做错什么了?我也试过使用my_project.main,但也没用。我用的是1.3.0期末考试。


Tags: to项目djangodebug命令log应用程序main
3条回答

你需要命名你的记录器。当前,您正在登录到根日志记录器,该日志记录器未被处理程序捕获,处理程序正在查找main

你想要的不是logging.debug("message")

logger = logging.getLogger('main')
logger.debug("message")

不需要将“stream”设置为sys.stdout。但是,您应该定义格式化程序:

示例:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'log_to_stdout': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
            },
        },
    'loggers': {
        'main': {
            'handlers': ['log_to_stdout'],
            'level': 'DEBUG',
            'propagate': True,
        }
    }
}

如果使用cron注册这些自定义命令,则可以通过将输出重定向到文本文件来“强制”日志记录。

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt

这将在每天早上12点运行cron作业,任何指向stdout的内容(如python print语句)都将转储到此文本文件中,并连接到日志文件中的任何现有文本上。

如果不使用cron,只需创建一个shell脚本来运行需要运行的所有脚本,并手动将它们指向所需的日志文件。

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt

……等等。

相关问题 更多 >