Python基础模块值日志模块logging

日志的使用的三种方式方式

1、编程式使用日志

2、logging格式的配置文件

3、字典方式的配置

日志级别

级别级别数值使用实际
DEBUG10详情信息,常用于调试
INFO20程序正常运行过程中产生的一些信息
WARNING30警告,虽然程序还在正常运行工作,但有可能发生错误(默认)
ERROR40由于更严重的问题,程序已不能执行一些功能
CRITICAL50严重错误,程序已不能正常运行
import logging
​
# 默认输出是 warning 级别
#使用baseConfig()指定日志输出级别  日志输出方式
logging.basicConfig(filename="demo.log",filemode="w",level=logging.DEBUG)
​
logging.debug("this is a debug log")
logging.info("this is a info log")
logging.warning("this is a warning log")
logging.error("this is a error log")
logging.critical("this is a critical log")

向日志输出变量

import logging
​
# 默认输出是 warning 级别
​
logging.basicConfig(level=logging.DEBUG)
name="张三"
age=18
logging.debug("姓名:%s 年龄:%d",name ,age)
logging.debug("姓名:%s 年龄:%d"%(name,age))
logging.debug("姓名:{} 年龄:{}".format(name,age))
logging.debug(f"姓名:{name} 年龄:{age}")

输出格式和添加一些公共信息

import logging
​
# 输出格式和添加一些公共信息logging.basicConfig(format)
​
logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",
                    datefmt="%Y/%m/%d %H:%M:%S",level=logging.DEBUG)
name="张三"
age=18
logging.debug("姓名:%s 年龄:%d",name ,age)
​
logging.warning(f"姓名:{name} 年龄:{age}")

logging的高级应用

logging模块采用模块化设计,主要包含四种组建

Loggers:记录器,提供应用程序代码能直接使用的接口;

Handles:处理器,将记录器产生的日志发送至目的地;

Filter:过滤器,提供更好的粒度控制,决定哪些日志会被输出;

Formatter:格式化器,设置日志内容的组成结构和消息字段。

loggers 记录器

1.提供应用程序的调用接口

logger=logging.getLogger(__name__)
logger是单列

2.决定日志记录的级别

logger.setLevel()

3.将日志内容传递到相关联的handlers中

logger.addHandler()和logger.removeHandler()

Handlers处理器

将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方。

StreamHandler
标准输出stdout(如显示器)分发器
创建方法:sh=logging.StreamHandler(stream-None)
FileHandler
将日志保存到磁盘文件处理器
创建方法:fh=logging.FileHandler(filename,mode="a",encoding=None,delay=False)
​
--------------------------------------------------------------
setFormatter():设置当前handler对象使用的消息格式
常用的Handlers处理器
StreamHandler
FileHandler
BaseRotatingHandler
RotatingFileHandler
TimeRotatingFileHandler

Formatters

Formatter对象用来最终设置日志信息的顺讯、结构和内容

构造方法:
ft=logging.Formatter.__init__(fmt=None,datefmt=None,style=" %")
datefmt默认是%Y-%m-%d %H:%M:%S样式的
style参数默认为 百分符%,这表示%(<dictionary key>)s格式的字符串
格式字符串作用
%(name)s日志记录器的名称(记录通道)
%(levelno)s日志记录级别的数字DEBUG=10、INFO=20、WARNING=30、ERROR=40、CRITICAL=50
%(levelname)s日志记录级别的文本“DEBUG”、“INFO”、“WARNING”、“ERROR”、“CRITICAL”
%(pathname)s日志调用的源文件的完整路径名
%(filename)s日志调用的源文件的文件名部分
%(module)s日志调用的源文件的文件名的名称部分
%(lineno)d日志调用的源行号
%(funcName)s日志调用的函数名
%(created)f打印日志的时间time.time() 的返回值
%(asctime)s打印日志的时间datetime.datetime.now() 的返回值
%(msecs)d打印日志的毫秒部分
%(relativeCreated)d打印日志的时间,毫秒为单位是相对于加载 logging 模块的时间(通常在应用程序启动时)
%(thread)d线程ID
%(threadName)s线程名,一般是主线程 MainThread
%(process)d进程ID
%(message)s日志信息

使用配置文件的方式

#./logging.conf
​
#记录器:提供应用程序代码直接使用的接口
#设置记录器名称,root必须存在!!!
[loggers]
keys=root,applog
​
#处理器,将记录器产生的日志发送至目的地
#设置处理器类型
[handlers]
keys=fileHandler,consoleHandler
​
#格式化器,设置日志内容的组成结构和消息字段
#设置格式化器的种类
[formatters]
keys=simpleFormatter
​
#设置记录器root的级别与种类
[logger_root]
level=DEBUG
handlers=consoleHandler
​
#设置记录器applog的级别与种类
[logger_applog]
level=DEBUG 
handlers=fileHandler,consoleHandler
#起个对外的名字
qualname=applog
#继承关系
propagate=0
​
#设置
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
​
[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
#在午夜1点(3600s)开启下一个log文件,第四个参数0表示保留历史文件
args=('applog.log','midnight',3600,0)
level=DEBUG
formatter=simpleFormatter
​
[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
#设置时间输出格式
datefmt=%Y-%m-%d %H:%M:%S

import logging
import logging.config
​
logging.config.fileConfig('logging.conf')
#使用字典就能从任意格式文件进行配置,字典是一种接口格式
# logging.config.dictConfig({"loggers":"root,applog"})
​
rootLogger = logging.getLogger('applog')
rootLogger.debug("This is root Logger, debug")
​
logger = logging.getLogger('cn.cccb.applog')
logger.debug("This is applog, debug")
​
try:
    int(a)
except Exception as e:
    logger.exception(e)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值