logging记录日志

日志是一个系统的重要组成部分,用以记录用户操作系统运行状态错误信息。日志记录的好坏直接关系到系统出现问题时定位的速度。logging模块Python2.3版本开始成为Python标准库的一部分。

 

日志级别

在最简单的使用中,我们直接导入logging模块,然后调用它的debuginfowarnerrorcritical等函数记录日志。默认情况下,logging模块将日志打印到屏幕终端,日志级别为WARNNING,也就是说日志级别大于等于WARNING的日志才会被显示

#!/usr/bin/python3
import logginglogging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')
default_logging.py

程序执行结果如下:

$ python3 default_logging.py 
WARNING:root:warn message
ERROR:root:error.message
CRITICAL:root:critical.message

日志级别是一个逻辑上的概念,用来区分日志的重要程度。将日志分为不停级别的日志后,一方面可以在大多数时间只保存级别比较高的日志来提高性能;领一方面也便于日志的分析。例如,从一个超大的日志文件中,快速找出几条错误信息。

在python的logging模块中,日志分为5个级别:

日志级别权重含义
CAITICAL50严重错误,表名软件已不能继续运行了
ERROR40发生严重的错误,必须马上处理
WARNING30应用程序可以容忍这些信息,软件还是在正常工作,不过它们应该被检查及修复,否则将在不久的将来发生问题
INFO20证明事情按预期工作,突出强调应用程序的运行过程
DEBUG10详细信息,只有开发人员调试程序时才需要关注的事情

配置日志格式

在使用logging记录日志之前,我们可以进行一些简单的配置,如下:

#!/usr/bin/python3
import logginglogging.basicConfig(filename='app.log', level=logging.INFO)logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

执行上面的程序,会在当前目录下产生一个app.log文件。该文件中存在INFO及INFO以上级别的日志记录。

上面我们通过basicConfig方法对日志进行了简单的配置,我们也可以进行更加复杂的日志配置。在这之前先了解logging模块中的几个概念:

  • Logger:日志记录器,是应用程序中能直接使用的接口
  • Handler: 日志处理器,用以表名将日志保存到什么地方以及保存多久
  • Formatter: 格式化,用以配置日志的输出格式

在典型的使用场景中,一个日志记录器使用一个日志处理器,一个日志处理器使用一个日志格式化

python的logging模块提供给你了多种方式来配置日志。对于比较简单的脚本,可以直接使用basicConfig在代码中配置日志对于比较复杂的项目,可以将日志的配置保存在一个配置文件中,然后在代码中使用fileConfig函数读取配置文件。

 

源码中配置日志示例

在这个例子中,日志文件会保存所有DEBUG级别及以上级别的日志。每一条日志包含了打印日志的时间,日志的级别和日志的内容

#!/usr/bin/python3
import logginglogging.basicConfig(filename='app.log',level=logging.DEBUG,format='%(asctime)s : %(levelname)s : %(message)s')logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

 

典型的日志配置文件示例

对于复杂的项目,一般将日志配置保存到配置文件中。如下:logging.cnf

#首先在[loggers]声明一个名为root的logger
[loggers]
keys = root#在[handlers]中声明一个名为logfile的handler
[handlers]
keys = logfile#在[formatters]中声明一个名为generic的formatter
[formatters]
keys = generic#在[logger_root]中定义root这个logger所使用的handler
[logger_root]
handlers = logfile#在[handler_logfile]中定义handler输出日志方式、日志文件的切换时间等
[handler_logfile]
class = handlers.TimedRotatingFileHandler
args = ('app.log',)
level = DEBUG
format = generic#[在formatter_generic]中定义了日志的格式,包括日志产生的时间、日志级别、产生日志的文件名和行号等信息
[formatter_generic]
format = '%(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s'

python代码中使用logging.config模块的fileConfig函数加载日志配置

#!/usr/bin/python3
import logging
import logging.configlogging.config.fileConfig('logging.cnf')logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

转载于:https://www.cnblogs.com/sellsa/p/10078138.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#编程之接口

1.定义 接口是把公共方法和属性组合起来,以封装特定功能的一个集合。(一旦定义了接口,就可以在类中实现它。这样类就可以支持接口所指定的所有属性和成员) 注意1:接口不能单独存在。不能像实例化一个类那样实例化一个接…

supervisor守护进程

2019独角兽企业重金招聘Python工程师标准>>> supervisor 是一个client/server系统,把不是守护进程的进程变成守护进程,并监控和控制类 Unix 操作系统上的进程。 upervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台dae…

神经网络算法 java 源代码_神经网络算法与实现 ——基于Java语言 代码实例

【实例简介】Neural Network Programming with Java_ISBN 978-7-115-46093-6【实例截图】【核心代码】NeuralNetworkProgrammingwithJava_code└── Neural Network Programming with Java_code├── Chapter1│ ├── HiddenLayer.java│ ├── InputLayer.java│ ├…

javascript面试_在编码面试中需要注意的3个JavaScript问题

javascript面试JavaScript is the official language of all modern web browsers. As such, JavaScript questions come up in all sorts of developer interviews.JavaScript是所有现代Web浏览器的官方语言。 因此,各种开发人员访谈中都会出现JavaScript问题。 T…

【学习笔记】深入理解js原型和闭包(11)——执行上下文栈

继续上文的内容。 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个…

Java基础--访问权限控制符

今天我们来探讨一下访问权限控制符。 使用场景一:攻城狮A编写了ClassA,但是他不想所有的攻城狮都可以使用该类,应该怎么办? 使用场景二:攻城狮A编写了ClassA,里面有func1方法和func2方法,但是他…

css绘制正方体_设计师仅使用CSS绘制了8个标志性X战警

css绘制正方体Here are three links worth your time:这是三个值得您花费时间的链接: A designer drew 8 iconic X-Men using nothing but CSS (1 minute interactive) 一位设计师仅用CSS绘制了8个标志性的X战警( 互动时间为1分钟 ) Raspberry Pi just turned 5. H…

Dubbo简单介绍及实例

1、概念 Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包含:高性能NIO通讯及多协议集成。服务动态寻址与路由。软负载均衡与容错,依赖分析与降级等。 说通俗点,就是首先将程序组件化成一…

Oracle 10.2.0.5升级至11.2.0.4

参照MOS 官方文档Complete Checklist for Manual Upgrade to Oracle Database 11gR2 (11.2) (Doc ID 837570.1)一、升级前的准备1、复制utlu112i.sql脚本从11G数据库复制$ORACLE_HOME/rdbms/admin/utlu112i.sql 脚本至10g 数据库临时目录,准备执行如果不在10g数据库…

脱壳_详细_使用的方法_01

ZC: 如何确定被调试程序已经来到了 未加壳的程序中? ZC:  视频中是使用判断集中语言的特征 ZC:  我的方法:上面的方式 ESP平衡 1、第1课 (1)、单步跟踪(原则:向下的跳转>正常F8,向上的跳转>F4跳过(或者用F2…

android 函数式编程_Android开发人员的函数式编程-第1部分

android 函数式编程by Anup Cowkur通过安纳普考库(Anup Cowkur) Android开发人员的函数式编程-第1部分 (Functional Programming for Android Developers — Part 1) Lately, I’ve been spending a lot of time learning Elixir, an awesome functional programming language…

java编程 内存_Java编程技术之浅析JVM内存

JVMJVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。基本认知:1.JVM是用于运行Java代码的假象计算机,主要有一套字节码指令…

bzoj1116: [POI2008]CLO

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id1116 题目大意:Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 题解&am…

java排序算法大全_各种排序算法的分析及java实现

排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于要找工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。排序大的分类可以分为两…

Cocos2d-x 3.0 简捷的物理引擎

Cocos2d-x 3.0 开发(九)使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官网Demo 水墨鱼的专栏 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 须要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通过Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback,发现它给的 callback 例子中,都是用 IloLPMatrix 这个类放约束条件,在 IloLPMatrix 中, 每个约束条件存储在 IloRange 中。 使用 IloLPMatrix 的好处是,这个类可以方便查看模型中的求…

6/12 Sprint2 看板和燃尽图

转载于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务

mailto 附带附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

转:PHP应用性能优化指南

程序员都喜欢最新的PHP 7,因为它使PHP成为执行最快的脚本语言之一(参考PHP 7 vs HHVM 比较)。但是保持最佳性能不仅需要快速执行代码,更需要我们知道影响性能的问题点,以及这些问题的解决方案。本文涵盖了保障PHP应用平…