当前位置:首页 > 前端技术 > logging日志带颜色

logging日志带颜色

2022年09月17日 17:16:09前端技术7

 

在控制台打印时通常使用print函数,但是如果我们需要打印一些进度信息,这些信息通常包含统一的格式,使用print函数是不是比较繁琐,另外,当需要将信息写入文件,创建文件和写入信息,文件的管理和频繁的打开关闭是不是比较危险。对于python语言来说,一个logging模块就能解决上述问题。

一、格式设定

直接在需要print的地方使用logging来代替就可以了,logging分为debug,info,warning,error,critical五个等级(等级依次提升),默认情况下只会打印warning以上等级即warning,error,critical的内容,如果需要打印debug以上的日志和修改打印格式,则需要通过basicConfig函数设定logging。

logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                    level=logging.DEBUG)

其中format来设定打印格式,具体含义可参考https://blog.csdn.net/orca123456/article/details/84864785

level是设置打印的最小级别,由于debug<info<warning<error<critical,当设置为debug时,所有级别的日志都会打印。

二、保存文件

 logging默认只输出到控制台,不会保留到文件系统中。如果需要保存日志,则需要通过getLogger()方法来获取logging对象来设定。参考https://www.cnblogs.com/nancyzhu/p/8551506.html

import logging
from logging import handlers

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日志级别关系映射

    def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(level))#设置日志级别
        sh = logging.StreamHandler()#往屏幕上输出
        sh.setFormatter(format_str) #设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
        #实例化TimedRotatingFileHandler
        #interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期(interval==0时代表星期一)
        # midnight 每天凌晨
        th.setFormatter(format_str)#设置文件里写入的格式
        self.logger.addHandler(sh) #把对象加到logger里
        self.logger.addHandler(th)
if __name__ == '__main__':
    log = Logger('all.log',level='debug')
    log.logger.debug('debug')
    log.logger.info('info')
    log.logger.warning('警告')
    log.logger.error('报错')
    log.logger.critical('严重')
    Logger('error.log', level='error').logger.error('error')

 

三、带颜色日志

正常情况下,我们希望带有颜色的日志,通常error和critical用红色表示,warning用橙色表示,info用绿色表示。另外不希望用log.logger这么长,同时也不希望每次在应用之前都重新生成一个对象,希望使用起来和logging一样引进来就能直接调用。下面是具体实现方式。

import logging
from colorma import Fore,style


# 获取对象
def get_logger():
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    if not logger.handlers:
        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            " %(message)s")
        ch.setFormatter(formatter)
        logger.addHandler(ch)
    return logger

#通过静态成员方法来调用
class Log:

    logger = get_logger()

    @staticmethod
    def debug(msg):
        Log.logger.debug(Fore.WHITE + "[DEBUG]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def info(msg):
        Log.logger.info(Fore.GREEN + "[INFO]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def warning(msg):
        Log.logger.warning("\033[38;5;214m" + "[WARNING]: " + str(msg) + "\033[m")

    @staticmethod
    def error(msg):
        Log.logger.error(Fore.RED + "[ERROR]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def critical(msg):
        Log.logger.critical(Fore.RED + "[CRITICAL]: " + str(msg) + Style.RESET_ALL)

在使用时只需要import Log, 在具体地方就可以想logging直接使用了(如Log.info("I am green")),并且可以看到日志颜色发生了变化。

但是当需要写入文件的时候,通过封装的方式如何将filename传递进去呢?该内容将后续更新

作者:wangyhwyh753
来源链接:https://blog.csdn.net/wangyhwyh753/article/details/105277142

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/front/42543.html

标签: 颜色设置
分享给朋友:

“logging日志带颜色” 的相关文章

Html设置超链接文字颜色

为了突出超链接,超链接文字通常采用与其他文字不同的颜色,超链接文字的下端还会加一条横线。网页的超链接文字有默认颜色,在默认情况下,浏览器以蓝色作为超链接文字的颜色,访问过的文字则颜色变成暗红色。在<body>标记中也可以自定义这些颜色。 基本...

html 给div设置边框颜色代码,div边框颜色设置

html 给div设置边框颜色代码,div边框颜色设置

div边框颜色 css设置div边框颜色 使用css对div边框设置颜色是常见CSS样式设置。对div边框颜色设置说需要css单词为border。 去了解相关教程:《CSS边框》教程 一、div四条边的边框颜色设置 如果不设置边框宽度粗细...

sublimeText 3 使用

颜色设置: Preferences - Color Scheme 里面有众多颜色模板,可以自行选择   输入中文: http://www.cnblogs.com/afei-qwerty/p/6710235.html...

UI设计规范

UI设计规范

一、界面布局 (版心大小,eg:1200px) 二、颜色 1、背景颜色 2、主颜色 3、辅助颜色   三、文字规范 1、字体颜色 2、字体大小 3、字体类型 四、按钮规范 五、图标规范 六、...

10月15号

今天学习就简单的看了一下HTML颜色 HTML 颜色由一个十六进制符号来定义,这个符号由红色、绿色和蓝色的值组成(RGB)。 每种颜色的最小值是0(十六进制:#00)。最大值是255(十六进制:#FF)。 作者: 哦心有...

web前端——html基础笔记 NO.13{盒模型,颜色值,字体的缩写}

盒模型代码简写 还记得在讲盒模型时外边距(margin)、内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左。具体应用在margin和padding的例子如下: margin:10px 15px 12px 14...

HTML基础之颜色

颜色表示 HTML 颜色由一个十六进制符号来定义,这个符号由红色、绿色和蓝色的值组成(RGB)。 每种颜色的最小值是0(十六进制:#00)。最大值是255(十六进制:#FF)。 目前所有浏览器也都支持颜色名来定义。包括141个颜色名称都是在HTML...

secureCRT设置背景颜色和目录(文件夹)颜色

secureCRT设置背景颜色和目录(文件夹)颜色

设置背景颜色: 步骤一:Options--->Global Options...如下图所示: 步骤二:Terminal--->Appearance--->ANSI Color,点击右边的Normal colors的第一个配色框【...

Notepad++中的颜色属性设置大全

Indent guideline style  缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的())Bad brace color  错误的框架的颜色(如js中{}里面有错...

html中css字体颜色代码大全,css字体颜色的设置方法

html中css字体颜色代码大全,css字体颜色的设置方法

css字体颜色的设置方法:首先创建一个HTML示例文件;然后在body定义一些p标签并在p标签中输入文字内容;最后给p标签添加css样式为“p{color: blue}”即可修改字体颜色。 本文操作环境:windows7系统、HTML5&am...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。