python处理日志_Python日志处理logging模块

原标题:Python日志处理logging模块

一、logging模块简介及快速使用

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。

优点:

可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析。

logging快速使用

# 1.导入Logging包

importlogging

# 2.设置配置信息

logging.basicConfig(level=logging.INFO,format= '%(asctime)s-%(name)s-%(levelname)s-%(message)s')

# 3.定义日志名称getlogger

logger = logging.getLogger( "log_demo")

# 4.info,debug

logger.info( "info")

logger.debug( "debug")

logger.warning( "warning")

二、logging模块基本使用

日志输出文件

设置logger名称 logger = logging.getLogger(log_name)

设置log级别 logger.setLevel(logging.info)

创建一个handler,用于写入日志文件 fh = logging.FileHandler(log_file)

设置日志级别,默认为logging.WARNING fh.setLevel(logLevel[log_level])

定义handler的输出格式 formatter = logging.Formatter('%(asctime)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s') fh.setFormatter(formatter)

添加handler logger.addHandler(fh)

format %(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s : 打印日志信息

代码

importlogging

# 1.设置logger名称

logger = logging.getLogger( "log_file_demo")

# 2.设置log级别logger.setLevel(logging.INFO)

# 3.创建handler

fh_stream = logging.StreamHandler

# 写入文件

fh_file = logging.FileHandler( "./test.log")

# 4.设置日志级别

fh_stream.setLevel(logging.DEBUG)

fh_file.setLevel(logging.WARNING)

# 5.定义输出格式

formatter = logging.Formatter( '%(asctime)s %(name)s %(levelname)s %(message)s ')

fh_stream.setFormatter(formatter)

fh_file.setFormatter(formatter)

# 6.添加handler

logger.addHandler(fh_stream)

logger.addHandler(fh_file)

# 7.运行输出

logger.info( "This is a info")

logger.debug( "This is a debug")

logger.warning( "This is a warning")

三、将日志进行封装

importlogging

from config importConf

importdatetime,os

from config.Conf importConfigYaml

#定义日志级别的映射

log_l = {

"info": logging.INFO,

"debug": logging.DEBUG,

"warning": logging.WARNING,

"error": logging.ERROR }

# 1. 创建类

classLogger:

#2. 定义参数

#输出文件名称,Loggername,日志级别

def __init__(self,log_file,log_name,log_level):

self.log_file = log_file #扩展名 配置文件

self.log_name = log_name #参数

self.log_level = log_level #配置文件

# 3. 编写输出控制台或文件

# 设置logger名称

self.logger = logging.getLogger(self.log_name)

# 设置log级别

self.logger.setLevel(log_l[self.log_level]) #logging.INFO

#判断handlers是否存在

ifnot self.logger.handlers:

# 输出控制台

fh_stream = logging.StreamHandler

fh_stream.setLevel(log_l[self.log_level])

formatter = logging.Formatter( '%(asctime)s %(name)s %(levelname)s %(message)s ')

fh_stream.setFormatter(formatter)

# 写入文件

fh_file = logging.FileHandler(self.log_file)

fh_file.setLevel(log_l[self.log_level])

fh_file.setFormatter(formatter)

# 添加handler

self.logger.addHandler(fh_stream)

self.logger.addHandler(fh_file)

# 4. 初始化参数数据

#日志文件名称,日志文件级别

#日志文件名称 = logs目录 + 当前时间+扩展名

#log目录

log_path = Conf.get_log_path

#当前时间

current_time = datetime.datetime.now.strftime( "%Y-%m-%d")

#扩展名

log_extension = ConfigYaml.get_conf_log_extension

logfile = os.path.join(log_path,current_time+log_extension)

#print(logfile)

#日志文件级别

loglevel = ConfigYaml.get_conf_log

#print(loglevel)

# 5. 对外方法,初始log工具类,提供其它类使用

def my_log(log_name = __file__):

returnLogger(log_file=logfile,log_name=log_name,log_level=loglevel).logger

if__name__ == "__main__":my_log.debug( "This is a debug")返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值