前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python的日志模块案例

python的日志模块案例

作者头像
AsiaYe
发布2020-08-26 17:57:55
7310
发布2020-08-26 17:57:55
举报
文章被收录于专栏:DBA随笔DBA随笔

//

python的日志模块案例

//

这两天在看python核心技术与实战这个公开课,有些内容讲的挺好的,拿出来分享一下。今天主要来看看python的日志模块,在python中,使用logging模块来写日志,常见的logging等级如下:

代码语言:javascript
复制
[root@VM-0-14-centos ~]# python
Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import logging
>>> logging.debug('aaa')
>>> logging.info('bbb')
>>> logging.warning('ccc')
WARNING:root:ccc
>>> logging.error('ddd')
ERROR:root:ddd
>>> logging.critical('eee')
CRITICAL:root:eee

默认的日志等级有:debug、info、warning、error、critical这几个等级,其中root logger的level是logging.WARNING,低于该级别的就不输出了,所以上面的例子中,我们只看到warning以上的log等级才输出了我们想要的内容。

常见的logging的模块包含如下类型:

代码语言:javascript
复制
logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日志输出到文件

日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler
logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler

logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler:  远程输出日志到UDP sockets
logging.handlers.SMTPHandler:  远程输出日志到邮件地址
logging.handlers.SysLogHandler: 日志输出到syslog
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

今天我们介绍RotatingFileHandler模块的一个例子

它位于logging.handlers支持循环日志文件,

代码语言:javascript
复制
class logging.handlers.RotatingFileHandler(
filename, 
mode='a',
maxBytes=0, 
backupCount=0, 
encoding=None, 
delay=0)

其中:

参数maxBytes:

当文件大小达到或者超过maxBytes时,就会新创建一个日志文件。

参数backupCount:

backupcount是备份数目,也就是最多能有多少个备份。命名会在日志的base_name后面加上.0-.n的后缀,如example.log.0,example.log.1,以此类推

上述的这两个参数任意一个为0时,rollover都不会发生。

根据上面的日志模式,封装了一个自己的日志模块,是在上述模块的基础上做的继承,如下:

代码语言:javascript
复制
# encoding: utf-8
#引入python的日志模块
import logging

from logging.handlers import RotatingFileHandler

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

    def __init__(self, log_filename, log_path="/var/log/", log_level="info", fmt='%(asctime)s %(name)s[%(process)d] %(levelname)s: %(message)s', max_bytes=10485760, backup_count=99, stdfile=True, stdout=F
alse):
        self.logger = logging.getLogger(log_filename.split(".")[0])
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(log_level.lower()))#设置日志级别
        if stdout:
            stdout_handler = logging.StreamHandler(sys.stdout)
            stdout_handler.setFormatter(format_str)
            self.logger.addHandler(stdout_handler)
        if stdfile:
            file_handler = RotatingFileHandler(log_path+log_filename, 'a', max_bytes, backup_count)
            file_handler.setFormatter(format_str)
            self.logger.addHandler(file_handler)

if __name__ == '__main__':
    testlog = MYLogger(log_filename="testlog.log", stdout=True)
    testlog.logger.debug('debug test')
    testlog.logger.info('info test')
    testlog.logger.warning('warning test')
    testlog.logger.error('error test')
    testlog.logger.critical('critical test')

其中__init__方法是类的构造函数,默认选择stdfile的方式来写日志,将日志写入到文件中。

引用这个模块的时候,使用方法如下:

代码语言:javascript
复制
# 添加当前MYLogger类所在的路径
sys.path.append("/data/mysql_workdir/dba/scripts/")
# 引入MYLogger这个类
from MYLOG import MYLogger
# 传入参数,初始化一个类的对象
MYLOGGER = MYLogger(log_filename="args_error.log", log_path="/data/mysql_workdir/dba/log/")
# 调用方法
MYLOGGER.logger.error(str1)
MYLOGGER.logger.info(str2)

这样就可以在我们的文件中调用日志模块,来将日志写入log文件了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档