您的位置:首页
一个日志模板,从traceback打印异常受启发做的模板,可被pycharm esclip sublime等ide识别和跳转
2018-07-27 17:46
696 查看
之前发过日志,再增加一种模板。 logging.Formatter('%(asctime)s-%(name)s-File"%(pathname)s",line%(lineno)d,in<%(funcName)s>-%(levelname)s-%(message)s',"%Y-%m-%d%H:%M:%S"),#一个模仿traceback异常的可跳转到打印日志地方的模板 此模板是模拟traceback字符串的格式,因为traceback字符串被pycahrm等ide支持成跳转了,按照那个格式做日志模板,那么pycharm控制台和日志文件都能很轻松跳转到指定文件的指定行。 使用pip安装:
pipinstall-ihttps://pypi.org/simple/--upgrademultiprocessing_log_manager可以不指定安装源,阿里和豆瓣的镜像是定时更新pypi官方包。
模板3 控制台的日志是这样,可以直接点击链接,自动跳转到指定文件的指定行。
模板4,对pycahrm更友好
使用模板4,将自动识别linux系统,由于pycahrm在背景的反着色上有些不美观,所以在win上使用上面的样式 当python程序判断运行的是linux系统,日志将自动切换模板,样式如下
发出针对streamhandler的单独优化的handler
classColorHandler(logging.Handler):
"""彩色日志,根据不同级别的日志显示不同颜色"""
def__init__(self,filter_logger_name_list=None):
logging.Handler.__init__(self)
self.formatter_new=logging.Formatter(
'%(asctime)s-%(name)s-"%(filename)s"-%(funcName)s-%(lineno)d-%(levelname)s-%(message)s',
"%Y-%m-%d%H:%M:%S")
#对控制台日志单独优化显示和跳转,单独对字符串某一部分使用特殊颜色,主要用于第四种模板,以免filehandler和mongohandler中带有\033
@classmethod
def_my_align(cls,string,length):
iflen(string)>length*2:
returnstring
custom_length=0
forwinstring:
custom_length+=1ifcls._is_ascii_word(w)else2
ifcustom_length<length:
place_length=length-custom_length
string+=''*place_length
returnstring
@staticmethod
def_is_ascii_word(w):
iford(w)<128:
returnTrue
defemit(self,record):
"""
3040黑色
3141红色
3242绿色
3343黃色
3444蓝色
3545紫红色
3646青蓝色
3747白色
:typerecord:logging.LogRecord
:return:
"""
ifself.formatterisformatter_dict[4]orself.formatterisself.formatter_new:
self.formatter=self.formatter_new
ifos.name=='nt':
self.__emit_for_fomatter4_pycahrm(record)#如果是使用第四种模板,并且是pycahrm运行py文件
else:
self.__emit_for_fomatter4_linux(record)#如果是使用第四种模板,是在linux上运行py文件
else:
self.__emit(record)#如果是使用第123种模板
def__emit_for_fomatter4_linux(self,record):
try:
msg=self.format(record)
file_formatter=''*10+'\033[7mFile"%s",line%d\033[0m'%(record.pathname,record.lineno)
ifrecord.levelno==10:
print('\033[0;32m%s'%self._my_align(msg,150)+file_formatter)
elifrecord.levelno==20:
print('\033[0;96m%s'%self._my_align(msg,150)+file_formatter)
elifrecord.levelno==30:
print('\033[0;33m%s'%self._my_align(msg,150)+file_formatter)
elifrecord.levelno==40:
print('\033[0;35m%s'%self._my_align(msg,150)+file_formatter)
elifrecord.levelno==50:
print('\033[0;31m%s'%self._my_align(msg,150)+file_formatter)
except(KeyboardInterrupt,SystemExit):
raise
except:#NOQA
self.handleError(record)
def__emit_for_fomatter4_pycahrm(self,record):
#\033[0;93;107mFile"%(pathname)s",line%(lineno)d,in%(funcName)s\033[0m
try:
msg=self.format(record)
for_linux_formatter=''*10+'\033[7m;File"%s",line%d\033[0m'%(record.pathname,record.lineno)
file_formatter=''*10+'\033[0;93;107mFile"%s",line%d\033[0m'%(record.pathname,record.lineno)
ifrecord.levelno==10:
print('\033[0;32m%s\033[0m'%self._my_align(msg,200)+file_formatter)#绿色
elifrecord.levelno==20:
print('\033[0;34m%s\033[0m'%self._my_align(msg,200)+file_formatter)#青蓝色
elifrecord.levelno==30:
print('\033[0;92m%s\033[0m'%self._my_align(msg,200)+file_formatter)#蓝色
elifrecord.levelno==40:
print('\033[0;35m%s\033[0m'%self._my_align(msg,200)+file_formatter)#紫红色
elifrecord.levelno==50:
print('\033[0;31m%s\033[0m'%self._my_align(msg,200)+file_formatter)#血红色
except(KeyboardInterrupt,SystemExit):
raise
except:#NOQA
self.handleError(record)
def__emit(self,record):
try:
msg=self.format(record)
ifrecord.levelno==10:
print('\033[0;32m%s\033[0m'%msg)#绿色
elifrecord.levelno==20:
print('\033[0;34m%s\033[0m'%msg)#青蓝色
elifrecord.levelno==30:
print('\033[0;92m%s\033[0m'%msg)#蓝色
elifrecord.levelno==40:
print('\033[0;35m%s\033[0m'%msg)#紫红色
elifrecord.levelno==50:
print('\033[0;31m%s\033[0m'%msg)#血红色
except(KeyboardInterrupt,SystemExit):
raise
except:#NOQA
self.handleError(record)
相关文章推荐
- 转载:c++打印日志文件的一个模板
- 优化IDE - IntelliJ IDEA中添加自动生成slf4j的日志模板
- Extending WCF(四)—一个统一处理异常、日志的解决方案
- DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等
- 打印java异常堆栈信息到日志文件
- 一个打印Log日志,好用的工具logger
- pycharm是一个很棒的python语言ide
- ie8下使用knockoutjs遇到的一个模板异常
- 在IDE的后台打印GC日志
- Android全局异常捕获,解决日志打印三次的BUG
- C++实现一个简单的异常日志记录类
- SSM框架集成log4日志打印模板
- 一个简单的日志类,将打印信息写到文件
- MFC异常打印调用堆栈整合SEH异常和日志文件类
- 如何开始使用PyCharm,并拥有一个高效的Python IDE
- ***CI异常记录到日志:CodeIgniter中设计一个全局exception hook
- Android全局异常捕获日志打印
- 让nginx日志中打印出通过f5跳转的内网请求的源ip
- log4j 打印异常日志到文件中
- 在没有个人/公司网站的情况下,如何利用同一个二维码自动识别手机系统(Android/IOS)跳转不同下载页面