编写自定义Django管理命令时,docs建议使用self.stdout
和self.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.stdout
和self.stderr
使用什么级别?
1条答案
按热度按时间c86crjj01#
Django BaseCommand日志记录器和日志记录器有什么区别吗?
是的,非常多。
stdout
和stderr
只是I/O处理程序,默认情况下,写入 * 标准输出通道(stdout)* [wiki]和 * 标准错误通道(stderr)* [wiki]。因此,它们只是将内容写入这些通道,不做任何格式化,没有可能被忽略的日志级别,并且不能与多个处理程序一起工作。这就是日志记录包的基本功能:它允许用户正确地格式化它,根据日志级别忽略它,并让它通过(多个)自定义处理程序来处理它。2例如,将它写入输出通道,保存到文件,插入到数据库等。
Django BaseCommand日志记录器是否使用了底层的日志模块?如果是,
self.stdout
和self.stderr
使用了什么级别?否,
logging
模块有一个默认情况下会写入输出通道的处理程序,尽管您可以将其配置为使用不同的处理程序。