标签:logging ipython tornado python
当我启动IPython时,我看到这样的日志:
[I 17:03:59.993 NotebookApp] Using MathJax from CDN: https://cdn.mathjax.org/mathjax/latest/MathJax.js
[W 17:04:00.292 NotebookApp] Terminals not available (error was No module named terminado)
[I 17:04:00.293 NotebookApp] Serving notebooks from local directory: /home/oleg
[I 17:04:00.293 NotebookApp] 0 active kernels
[I 17:04:00.293 NotebookApp] The IPython Notebook is running at: http://localhost:8888/
[I 17:04:00.293 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
在这里,消息的级别略有格式,也就是说,您看到的是I而不是INFO,W而不是WARNING等.此外,方括号是彩色的.我觉得这很酷,也想用这种方式写日志.但是,IPython使用龙卷风测井系统.
我使用colorlog module为消息着色.为了进行格式化,我将StreamHandler类子类化,如下所述:
How to get the level of the logging record in a custom logging.Handler in Python?
class FormatLevelHandler(logging.StreamHandler):
def emit(self, record):
record.levelname = record.levelname[0]
logging.StreamHandler.emit(self, record)
但是当我这样做时,着色不再起作用.
有没有办法同时记录级别名称的格式和颜色?
这是我的完整代码:
import logging
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
"%(log_color)s[%(levelname)1s %(asctime)s] %(reset)s %(blue)s%(message)s",
datefmt=None,
reset=True,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
secondary_log_colors={},
style='%'
)
logger = logging.getLogger(__name__)
class FormatLevelHandler(logging.StreamHandler):
def emit(self, record):
record.levelname = record.levelname[0]
logging.StreamHandler.emit(self, record)
ch = FormatLevelHandler()
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.setLevel(logging.DEBUG)
logger.info('Hello')
logger.debug('Hi')
解决方法:
不要在handler.emit()中更改级别.而是使用%(levelname)1.1s(而不是示例中的%(levelname)1s)截断格式字符串本身中的级别.
或者,无论是否使用其余的Tornado,都可以使用Tornado日志记录系统:只需在程序开始时调用tornado.log.enable_pretty_logging().
标签:logging,ipython,tornado,python 来源: https://codeday.me/bug/20191120/2040312.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。