python的日志模块案例
时间:2022-07-23
本文章向大家介绍python的日志模块案例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
//
python的日志模块案例
//
这两天在看python核心技术与实战这个公开课,有些内容讲的挺好的,拿出来分享一下。今天主要来看看python的日志模块,在python中,使用logging模块来写日志,常见的logging等级如下:
[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的模块包含如下类型:
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支持循环日志文件,
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都不会发生。
根据上面的日志模式,封装了一个自己的日志模块,是在上述模块的基础上做的继承,如下:
# 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的方式来写日志,将日志写入到文件中。
引用这个模块的时候,使用方法如下:
# 添加当前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文件了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 因str_replace导致的注入问题总结
- laravel框架中间件 except 和 only 的用法示例
- 浅析Python 多行匹配模式
- PHP命名空间定义与用法实例分析
- php array_chunk()函数用法与注意事项
- Laravel如何同时连接多个数据库详解
- PHP面向对象程序设计中的self、static、parent关键字用法分析
- php实现简单的守护进程创建、开启与关闭操作
- 关于CentOs系统自带python和yum卸载后的解决办法
- php5对象复制、clone、浅复制与深复制实例详解
- Linux命令行快速技巧之定位一个文件的办法
- ubuntu中python调用C/C++办法之动态链接库详解
- linux中使用boost.python调用c++动态库的办法
- 在Linux系统下上传项目到码云的办法
- PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】 原创