我正在使用 Python 中的 logging
模块来编写调试和错误消息。
我想将 logging.DEBUG
或更高级别的所有消息写入文件。
但是,我只想将 logging.WARNING
或更大的消息打印到屏幕上。
仅使用一个 Logger
和一个 FileHandler
是否可能?
最佳答案
如前所述,处理程序非常容易创建和添加,您最好只使用两个处理程序。但是,如果出于某种原因你想坚持使用一个,Python logging cookbook有一个部分描述或多或少你想做什么:记录到控制台和文件,但在不同的级别(它甚至告诉你如何做不同的格式)。不过,它使用单个 StreamHandler
而不是 FileHandler
来完成:
import logging
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='/temp/myapp.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
编辑:正如评论中所讨论的那样,这段代码仍然生成两个处理程序,但通过使用 basicConfig() 来“隐藏”一个构造。我强烈建议您明确地创建两者。
关于python - 文件处理程序的不同日志记录级别和 Python 中的显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6652727/