博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日志模块
阅读量:5165 次
发布时间:2019-06-13

本文共 3165 字,大约阅读时间需要 10 分钟。

一、日志的介绍

1.1 日志与print的区别:

  print:灵活打印,移除困难

  loger:多种格式化方案,方便移除,方便输出到文本

1.2 日志的级别 与 单例模式

 一、等级从低到高分为5个等级,默认的显示等级为warning

1. debug        详细信息,通常在诊断问题时感兴趣     2. info         确认事情的按期工作     3. warning      表示意外的发生,或者在不久的将来将要出现的问题(如:磁盘不足)     4. error        由于更严重的问题,程序无法执行     5. critical     一个严重的错误,指示程序本身可能无法继续执行 二、 loggin的默认显示等级     logging 是一个单列模式,如果在日志显示之后再去配置显示等级,则无作用。     只能在日志显示之前配置。         logging.basicConfig(level=logging.ERROR)     使用这个配置等级,包含这个等级与比等级高的日志

  

# logging 的配置只能在最开始配置logging.basicConfig(level=logging.ERROR)logging.disable(logging.ERROR)logging.debug('1.基础调试信息')logging.disable(logging.CRITICAL)logging.info('2.输出信息')logging.warning('3.告警信息')logging.error('4.程序错误信息')logging.critical('5.严重告警信息')logging.basicConfig(level=logging.ERROR)# 在此处配置无效,还是从3开始显示 。因为是单列模式logging.debug('11.基础调试信息')logging.info('22.输出信息')logging.warning('33.告警信息')logging.error('44.程序错误信息')

 

二、日志的配置

2.1 日志的格式化配置

  单独使用的时候,使用logging.basicConfig这个函数

  使用logging.getloger这个对象的时候。使用 logging.Formatter来配置

  basicConfig 每个文件只配置一次,且放在最前面,重复配置只有第一条起作用   具体的format配置选项在   https://docs.python.org/3/library/logging.html#formatter-objects 中的LogRecord attributes
import logging # 注意basciConfig 只能被写一次,多次配置,不是覆盖,只会第一条生效。 # 如果第一条没配置就使用默认的,在日志显示之后再配置无效,因为是单列模式# 1. 修改显示格式# logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)# 2.添加时间# logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.DEBUG)# 3. 添加文件,行号# logging.basicConfig(level=logging.DEBUG, format='%(lineno)d - %(filename)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s')# 4. 组合比较多logging.basicConfig(level=logging.DEBUG,                    format='%(lineno)d - %(filename)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s')de8ug = 'de8ug'logging.warning('%s python', de8ug)logging.debug('这一行跟着格式走')logging.info('这行也是')logging.warning('来吧')logging.debug('看下多复杂')

 

2.2 封装成函数多次使用

import loggingimport osimport sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))"""工程使用需求:1-不同日志名称2-打印同时在控制台,也有文件3-灵活控制等级"""# 日志的控制开关,关闭最高级别的日志,就是关闭所有的# logging.disable(logging.CRITICAL)def lh_log(logger_name='LH-LOG', log_file='lh-log.log', level=logging.DEBUG):    log_file = os.path.join(BASE_DIR, 'log', log_file)    # 创建 logger对象    logger = logging.getLogger(logger_name)
      if logger.hasHandlers():  # 如果已经存在hander就直接返回,在一个模块中重复引用,会造成重复答应
      return logger
logger.setLevel(level)  # 添加等级    # 创建控制台 console handler    ch = logging.StreamHandler()    ch.setLevel(level)    # 创建文件 handler    fh = logging.FileHandler(filename=log_file, encoding='utf-8')    # 创建 formatter    formatter = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(name)s %(levelname)s %(message)s')    # 添加 formatter    ch.setFormatter(formatter)    fh.setFormatter(formatter)    # 把 ch, fh 添加到 logger    logger.addHandler(ch)    logger.addHandler(fh)    return loggerdef main():    # 测试    logger = lh_log()    logger.debug('debug message')    logger.info('info message')    logger.warning('warn message')    logger.error('error message')    logger.critical('critical message')if __name__ == '__main__':    main()

 

转载于:https://www.cnblogs.com/louhui/p/9126238.html

你可能感兴趣的文章
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>