python Django 'BaseCommand'记录器和'logging.getLogger()'之间的区别

q8l4jmvw  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(141)

编写自定义Django管理命令时,docs建议使用self.stdoutself.stderr

class Command(BaseCommand):
    def handle(self, *args, **options):
        self.stdout.write("Hello world!")
        self.stderr.write("Something went horribly wrong")

我过去通常使用logging模块:

import logging

logger = logging.getLogger(__name__)

class Command(BaseCommand):
    def handle(self, *args, **options):
        logging.info("Hello world!")
        logging.error("Something went horribly wrong")

几个问题:

  • Django BaseCommand日志记录器和logging日志记录器之间有什么区别吗?
  • Django BaseCommand记录器是否使用logging模块?如果是,self.stdoutself.stderr使用什么级别?
c86crjj0

c86crjj01#

Django BaseCommand日志记录器和日志记录器有什么区别吗?

是的,非常多。stdoutstderr只是I/O处理程序,默认情况下,写入 * 标准输出通道(stdout)* [wiki]和 * 标准错误通道(stderr)* [wiki]。因此,它们只是将内容写入这些通道,不做任何格式化,没有可能被忽略的日志级别,并且不能与多个处理程序一起工作。

这就是日志记录包的基本功能:它允许用户正确地格式化它,根据日志级别忽略它,并让它通过(多个)自定义处理程序来处理它。2例如,将它写入输出通道,保存到文件,插入到数据库等。
Django BaseCommand日志记录器是否使用了底层的日志模块?如果是,self.stdoutself.stderr使用了什么级别?

logging模块有一个默认情况下会写入输出通道的处理程序,尽管您可以将其配置为使用不同的处理程序。

相关问题