loggin(日志模块)
这是一个提供日志功能的模块,它可以让你更敏捷的为你程序提供日志功能
一、常用日志记录场景及最佳解决方案:
日志记录方式 最佳记录日志方案
普通情况下,在控制台显示输出 print()
报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug())
发出有关特定事件的警告 warnings.warn()或者logging.warning()
报告错误 弹出异常
在不引发异常的情况下报告错误 logging.error(), logging.exception()或者logging.critical()
二、日志等级:
logging模块定义了下表所示的日志级别,按事件严重程度由低到高排列(注意是全部大写!因为它们是常量。):
级别 级别数值 使用时机
DEBUG 10 详细信息,常用于调试。
INFO 20 程序正常运行过程中产生的一些信息。
WARNING 30 警告用户,虽然程序还在正常工作,但有可能发生错误。
ERROR 40 由于更严重的问题,程序已不能执行一些功能了。
CRITICAL 50 严重错误,程序已不能继续运行。
默认级别是WARNING,表示只有WARING和比WARNING更严重的事件才会被记录到日志内,低级别的信息会被忽略。因此,默认情况下,DEBUG和INFO会被忽略,WARING、ERROR和CRITICAL会被记录。
三、logging基本使用方法:
产生五种日志级别(WARING、ERROR和CRITICAL会直接输出()内的提示语至屏幕):
logging.info('info')
logging.debug('debug')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
日志系统配置文件(定义日志一些规则):
logging.basicConfig(filename='test.log', level=logging.INFO, filemode='a', format='%(levelname)s:%(asctime)s:%(message)s')
filename:日志要保存至哪个文件中(定义了这个后日志将不再在屏幕上打印)
level:什么级别以上的日志需要保存
filemode:有"w"、"a"两种模式,同open一样,"a"追加,"w"覆盖
format:定义日志格式(后面提供日志元素表,建议通过":"将各种日志元素连接成合理的日志格式)
format定义格式时用的日志元素表:
日志元素 描述
%(asctime)s 日志产生的时间,默认格式为2003-07-08 16:49:45,896
%(created)f time.time()生成的日志创建时间戳
%(filename)s 生成日志的程序名
%(funcName)s 调用日志的函数名
%(levelname)s 日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
%(levelno)s 日志级别对应的数值
%(lineno)d 日志所针对的代码行号(如果可用的话)
%(module)s 生成日志的模块名
%(msecs)d 日志生成时间的毫秒部分
%(message)s 具体的日志信息
%(name)s 日志调用者
%(pathname)s 生成日志的文件的完整路径
%(process)d 生成日志的进程ID(如果可用)
%(processName)s 进程名(如果可用)
%(thread)d 生成日志的线程ID(如果可用)
%(threadName)s 线程名(如果可用)
四、logging高级用法(让日志即能写入文件又能在屏幕打印):
包含关系(左边包含右边):
记录器<——处理器<——格式化器
import logging
"""
logging模块采用了模块化设计,主要包含四种组件:
Loggers:记录器,提供应用程序代码能直接使用的接口;
Handlers:处理器,将记录器产生的日志发送至目的地;
Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出;
Formatters:格式化器,设置日志内容的组成结构和消息字段。
"""
# 创建一个记录器loggers,并设置默认等级
logger = logging.getLogger('jack') # ‘jack’位置定义了日志调用者的名字
logger.setLevel(logging.INFO)
# 创建两个处理器handlers(一个发往日志文件、一个发往屏幕),并分别设置他们的日志等级
stream = logging.StreamHandler() # 发往屏幕
stream.setLevel(logging.DEBUG) # 定义什么样级别以上的日志发往屏幕
file = logging.FileHandler('test.log') # 发往日志文件(需指定文件名称)
file.setLevel(logging.ERROR) # 定义什么样级别以上的日志发往日志文件
# 分别为两个处理器handlers创建格式化器formatters(可以让其在屏幕和日志文件中以不同的格式输出)
formatter_stream = logging.Formatter('%(levelname)s:%(asctime)s:%(message)s')
formatter_file = logging.Formatter('%(name)s:%(levelname)s:%(asctime)s:%(message)s')
# 为各个处理器handlers设置相应的格式化器
stream.setFormatter(formatter_stream)
file.setFormatter(formatter_file)
# 将所有的处理器handler加入自定义的记录器logger内
logger.addHandler(stream)
logger.addHandler(file)
# 测试日志功能
logger.debug('debug')
logger.info('info')
logger.warning('warn')
logger.error('error')
logger.critical('critical')
loggin(日志模块)的更多相关文章
- 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...
- Python 日志模块 logging通过配置文件方式使用
vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...
- 搭建一套自己实用的.net架构(2)【日志模块-log4net】
先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...
- logging 日志模块学习
logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...
- 日志模块logging使用心得
在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...
- python日志模块
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...
- ns3 Tutorial 中的日志模块(翻译)
转载地址:http://blog.sina.com.cn/s/blog_8ecca79b0101d7fe.html 1 日志模块的使用 在运行 first.cc 脚本时,我们已经简单 ...
- logging日志模块
为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...
随机推荐
- 【APP测试(Android)】--交叉事件
- Asterisk 11 chan_sip.c: Failed to authenticate device 看不到IP的问题
Asterisk 11 chan_sip.c: Failed to authenticate device 看不到IP的问题 没有验证过 原文地址 http://www.coochey.net/? ...
- xbeePRO900HP的几个关键参数
xbee PRO 900HP又叫xbee PRO S3B,在模块的正面有S3B的字样: 因为用到这个模块的,多用的是digimesh组网固件,所以以下参数修改只针对digimesh的修改:市面上的xb ...
- tensorflow学习之(四)使用placeholder 传入值
#placeholder 传入值 import tensorflow as tf """ tf.Variable:主要在于一些可训练变量(trainable variab ...
- SAS 输入与输出格式
SAS 输入与输出格式 一.认识SAS中的数据格式 SAS 中的格式有: 数字型 字符型 日期型 1.其中数字型的格式有一下集中表示方式: 整型数值:321 浮点数值:321.123 带逗号的数值:1 ...
- Runtime之成员变量&属性&关联对象
上篇介绍了Runtime类和对象的相关知识点,在4.5和4.6小节,也介绍了成员变量和属性的一些方法应用.本篇将讨论实现细节的相关内容. 在讨论之前,我们先来介绍一个很冷僻但又很有用的一个关键字:@e ...
- virtual box 下安装centos 7
1: 在virtual box下导入 镜像的时候报错: Failed to open/create the internal network 'HostInterfaceNetworking-Virt ...
- C语言判断大小端的几种方法
在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下. 以后用到了就直接可以用了. 所谓的大小端,大致的解释意思就是: [大端模式] CPU对操作数的存放方 ...
- Python模块——xml
xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行 ...
- linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法
用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖,用的依赖是: <dependency> ...