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

日志级别

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

#!/usr/bin/python3
import logging logging.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个级别:

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

配置日志格式

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

#!/usr/bin/python3
import logging logging.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 logging logging.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.config logging.config.fileConfig('logging.cnf') logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

logging记录日志的更多相关文章

  1. django使用logging记录日志

    django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...

  2. Python logging记录日志

    Python logging记录日志 调试的几种方法: 使用print()在控制台上输出 使用assert断言 使用logging模块 logging提供了一组便利的函数,用来做简单的日志,(当然也能 ...

  3. 建议47:使用logging记录日志信息

    # -*- coding:utf-8 -*- ''' Python中自带的logging 模块提供了日志功能,它将logger 的level 分为5 个级别 DEBUG 详细的信息,在追踪问题的时候使 ...

  4. Python通过logging记录日志并应用coloredlogs在控制台输出有色字体

    import logging import os from logging.handlers import TimedRotatingFileHandler import coloredlogs # ...

  5. python logging记录日志的方式

    python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志级别等级:critical > error > warning > info > deb ...

  6. logging 模块

    import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname) ...

  7. django 日志logging的配置以及处理

    django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/ 本文摘自http://davidbj.blog.51cto.com ...

  8. Python开发之日志记录模块:logging

    1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...

  9. [转]django 日志logging的配置以及处理

    http://davidbj.blog.51cto.com/4159484/1433741 日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用途.在J ...

随机推荐

  1. (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

    配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...

  2. 实用技巧:如何用 CSS 做到完全垂直居中

    本文将教你一个很有用的技巧——如何使用 CSS 做到完全的垂直居中.我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但 ...

  3. 初学者必看:.NET 中的静态与非静态的异同

    对于初学者来说,.NET 的静态和非静态一直比较难掌握,这里做一个总结,介绍静态类和普通类,静态方法和实例方法,静态构造函数和实例构造函数,静态字段和非静态字段的区别. 静态类 vs 普通类 静态类与 ...

  4. 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂

    [题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...

  5. 【leetcode 简单】 第七题 合并两个有序链表

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  6. AJAX的前世今生与未来

    一.通过三个问答来认识一下Ajax 什么是Ajax? Ajax是Asynchronous Javascript And XML的缩写,它是一种技术. Ajax有什么用? 这一技术能够向服务器请求额外的 ...

  7. C - Contest Setting Gym - 101982C dp 补题

    题目链接:https://vjudge.net/contest/273260#problem/C 学习了一下别人的思路,首先去重,然后离散化. dp数组开二维,每一次更新,状态转移方程,dp[ i ] ...

  8. CTF AWD模式攻防Note

    ###0x01 AWD模式 Attack With Defence,简而言之就是你既是一个hacker,又是一个manager.比赛形式:一般就是一个ssh对应一个web服务,然后flag五分钟一轮, ...

  9. python进阶之py文件内置属性

    前言 对于任何一个python文件来说,当python解释器运行一个py文件,会自动将一些内容加载到内置的属性中:一个模块我们可以看做是一个比类更大的对象. 查看模块的内置属性 我们先创建一个典型的p ...

  10. curl: (6) Couldn’t resolve host ‘www.ttlsa.com’【转】

    上周, 部分站点出现Couldn't resolve host.....问题,  导致公司所有走api的程序都无法正常使用(系统redhat 6.3的都出现问题, redhat 5一切OK). 最后解 ...