python 日志模块

为什么使用日志?... 或者用打印(Print)?
日志的两个目的:
1.诊断日志: 记录与应用程序操作相关的日志。例如,用户遇到的报错信息,可通过搜索诊断日志获得上下文信息。
2.审计日志: 为商业分析而记录的日志。从审计日志中,可提取用户的交易信息,并结合其他用户资料构成用户报告或者用来优化商业目标。
打印(Print)?
大多数情况下日志总能优于打印,日志的好处:
1.日志事件产生的日志记录 ,包含清晰可用的诊断信息,如文件名称、路径、函数名和行数等。

2.可通过logging.Logger.setLevel 方法进行有选择的日志记录,或可通过设置 logging.Logger.disabled 属性为 True 来屏蔽日志记录。

Logging模块主要包含四个组件:
1.Logger 记录器,提供了应用程序代码能直接使用的接口。
2.Handler 处理器,将(记录器产生的)日志记录发送至合适的目的地。
3.Filter 过滤器,对日志信息进行过滤
4.Formatter 格式化器,指明了最终输出中日志记录的格式。


日志级别   级别 何时使用
DEBUG 1 详细信息,方便调试问题。
INFO 2 证明事情按预期工作。
WARNING 3 表明发生了一些小意外,但不影响运行
ERROR 4 由于更严重的问题,软件已不能执行一些功能了。
CRITICAL 5 严重错误,表明软件已不能继续运行了。

Tutor:
1. 使用源码配置log
	LOG = logging.getLogger(‘mylog’)
	LOG.setLevel(logging.INFO)
	LOG_FORMAT = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
	
	# 输出到文件
	fh = logging.FileHandler(sys.argv[0]+'.log')
	fh.setLevel(logging.INFO)
	fh.setFormatter(LOG_FORMAT)
	LOG.addHandler(fh)
	
	# 再创建一个handler,用于输出到控制台
	ch = logging.StreamHandler()
	ch.setLevel(logging.DEBUG)
	ch.setFormatter(LOG_FORMAT)
	LOG.addHandler(ch)
	
2.使用字典配置log	
logging_config = dict(
    version = 1,
    formatters = {
        'f': {'format':
              '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'}
        },
    handlers = {
        'h': {'class': 'logging.StreamHandler',
              'formatter': 'f',
              'level': logging.DEBUG}
        },
    loggers = {
        'root': {'handlers': ['h'],
                 'level': logging.DEBUG}
        }
)
dictConfig(logging_config)

logger = logging.getLogger()
logger.debug('debug messages')


Logger记录器:

	使用Logger之前必须先创建Logger实例,
	方法:	
			logger = logging.getLogger(logger_name)
	创建Logger实例后,可以进行日志级别设置、增加处理器Handler
	方法:	
			logger.setLevel(logging.ERROR)
			logger.addHandler(handler_name)
			
	Handler 处理器:

	Handler类型有很多种,比较常用的有三个:StreamHandler,FileHandler,NullHandler,

	创建StreamHandler之后,可以通过使用以下方法设置日志级别,设置格式化器Formatter,增加或删除过滤器Filter。

	ch.setLevel(logging.WARN) # 指定日志级别,低于WARN级别的日志将被忽略
	ch.setFormatter(formatter_name) # 设置一个格式化器formatter
	ch.addFilter(filter_name) # 增加一个过滤器,可以增加多个
	ch.removeFilter(filter_name) # 删除一个过滤器

	StreamHandler创建方法: 
	sh = logging.StreamHandler(stream=None)
	FileHandler创建方法: 
	fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)

Formatter 格式化器:

	使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。

	创建方法: formatter = logging.Formatter(fmt=None, datefmt=None)
	其中,fmt是消息的格式化字符串,datefmt是日期字符串。如果不指明fmt,将使用'%(message)s'。

	有用的format格式
	格式		描述
	%(levelno)s	打印日志级别的数值
	%(levelname)s	打印日志级别名称
	%(pathname)s	打印当前执行程序的路径
	%(filename)s	打印当前执行程序名称
	%(funcName)s	打印日志的当前函数
	%(lineno)d	打印日志的当前行号
	%(asctime)s	打印日志的时间
	%(thread)d	打印线程id
	%(threadName)s	打印线程名称
	%(process)d	打印进程ID
	%(message)s	打印日志信息

Filter 过滤器:
Handlers和Loggers可以使用Filters来完成更复杂的过滤(暂时不太了解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值