我正在使用python的内置logging
模块
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.info('information!2') # this DOES go to both STDOUT and the FILE. but how to chromalog it???
这个设置的好处是输出打印到终端和 spam.log 文件。现在我想将chromalog
插入到此终端以获得颜色输出。通常我会通过上面的
chromalog.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s line %(lineno)d %(levelname)s: %(message)s', datefmt='%Y-%m-%d at %I:%M %p and %S secs')
不幸的是,我认为chromalog检测到输出转到文件并关闭颜色。如果chromalog可以为终端输出打开颜色并关闭文件输出的颜色,那将是理想的。
这可能吗?我该怎么做?附:我愿意接受chromalog的替代方案。
答案 0 :(得分:1)
我认为这与INFO
的默认颜色有关。这个脚本:
import logging
import chromalog
logger = logging.getLogger('foo')
chromalog.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s')
fh = logging.FileHandler('foo.log')
logger.addHandler(fh)
logger.warning('warning!')
提供彩色输出:
日志文件包含未着色的输出:
$ cat foo.log
warning!
答案 1 :(得分:0)
这是一个使用colorlog而不是chromalog的解决方案:
import logging
import colorlog
FORMAT_TEMPLATE = '%(asctime)s %(filename)s line %(lineno)d {}%(levelname)s{}: {}%(message)s'
FORMAT = FORMAT_TEMPLATE.format()
FORMAT_COLOR = FORMAT_TEMPLATE.format('%(log_color)s', '%(reset)s', '%(message_log_color)s')
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG) # if you want to see more than just warnings, remember this!! You can also set this option to a HANDLER if you want that handler to be at a different level.
# create an output to the terminal:
stdout_handler = logging.StreamHandler()
stdout_handler.setFormatter(
colorlog.ColoredFormatter(
FORMAT_COLOR,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
)
)
logger.addHandler(stdout_handler)
# create an output to a file:
fh = logging.FileHandler('mylog.log')
fh.setFormatter(
logging.Formatter(
FORMAT,
)
)
logger.addHandler(fh)
# ready to use!:
logger.debug('hi-ho!')
这里我们为我们想要的每个输出创建一个 Handler 。这样可以提供更多控制,并且可以为每个输出使用不同的格式选项。