博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 日志管理
阅读量:2226 次
发布时间:2019-05-09

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

一般情况下,一些程序的调试过程中我们会让它输出一些信息,特别是一些大型的程序,我们通过这些信息可以了解程序的运行情况,python提供了一个日志模块logging,它可以把我们想要的信息全部保存到一个日志文件中,方面我们查看。我们先看一个简单的例子。

>>> import logging
>>> LOG_FILENAME="C:\Python25\log_test.txt"
>>> logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
>>> logging.debug("This message should go to the log file")
    然后我们就可以在C盘python25目录下发现一个名为log_test.txt的文件,打开里面的内容为:    DEBUG:root:This message should go to the log file
    然后我们重复运行最后一句,会发现这个文本文件每次都会多出一行:DEBUG:root:This message should go to the log file
   下面我们看一个更标准的程序:
>>> import logging
>>> logger=logging.getLogger()
>>> handler=logging.FileHandler("Log_test.txt")
>>> logger.addHandler(handler)
>>> logger.setLevel(logging.NOTSET)
>>> logger.error("This is an error message")
>>> logger.info("This is an info message")
>>> logger.critical("This is a critical message")
    日志文件中会出现三行内容:
This is an error message
This is an info message
This is a critical message
    上面程序的第2行是生成一个日志对象,里面的参数时日志的名字,可以带,也可以不带。第3行是生成了一个handler,logging支持很多种Handler,像FileHandler,SocketHandler等待,这里由于我们要写文件,所以用了FileHandler,它的参数就是filename,默认当前路径,当然我们可以自己指定路径。
    第5行设置日志信息输出的级别。Logging提供了多种日志级别,如NOTSET,DEBUG,INFO,WARNING,ERROR,CRITICAL等,每个级别都对应一个数值,如果我们不自己设置输出级别,那么系统会执行缺省级别,值为30,就warning。Logging也提供了一个方法来查看缺省日志级别,getLevelName(logger,getEffectiveLevel())。
   
 
    日志对象对于不同的级别信息提供不同的函数进行输出,如:info(), error(), debug()等。当写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息。系统默认的日志级别排序为,CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET。比如说我们要输出的信息为CRITICAL,但是我们的日志级别为DEBUG,那么这个信息将被忽略掉。我们看下面的例子:
import logging
import sys
LEVELS={'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'critical':logging.CRITICAL}
 
if len(sys.argv)>1:
    level_name=sys.argv[1]
    level=LEVELS.get(level_name,logging.NOTSET)
    logging.basicConfig(level=level)
 
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical error message")
    运行时候,我们根据给的参数时debug,info等等,来看看输出情况,就可以知道各个日志级别的输出情况了,下面是结果:
 
   
    可以看到过滤进行的很明显。当我们设置级别最低位debug时,所有的信息都输出了,当我们设为最高位critical时候,只有critical输出了,低于critical的被过滤了。
    Logging是非常有用的,一个程序的健壮性也这个有关,当一个程序包含很多的调试信息时,可以方便我们发现问题,发现错误。
=================================
 

多进程日志管理

 

1. 最佳方法是多进程不共享日志文件,每个进程使用单独的日志文件。要查看日志文件时,可以用脚本将日志合并。

2. 使用文件锁时,存在多个进程的竞争,会降低日志系统的性能

 

=============================

 

转载于:https://www.cnblogs.com/SophiaTang/archive/2011/09/19/2181177.html

你可能感兴趣的文章
夯实Java基础系列1:Java面向对象三大特性(基础篇)
查看>>
夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
查看>>
夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
查看>>
Java 未来行情到底如何,来看看各界人士是怎么说的
查看>>
IntelliJ 平台 2020 年路线图
查看>>
走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
查看>>
微软宣布加入 OpenJDK,打不过就改变 Java 未来!
查看>>
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
查看>>
为什么强烈推荐 Java 程序员使用 Google Guava 编程!
查看>>
先搞清楚这些问题,简历上再写你熟悉Java!
查看>>
【数据库】关系数据库和非关系数据库的优缺点
查看>>
【数据结构】动态顺序表
查看>>
Markdown的基础使用
查看>>
Linux基础命令
查看>>
【C语言】交换两个数值的三种方法
查看>>
【数据结构】栈的简单理解以及对栈的基本操作
查看>>
【数据结构】简单不带环迷宫的实现(用栈实现)
查看>>
【C语言】简单的了解递归(求斐波那契,n的阶乘,字符串长度,把一个整型(无符号),转化为字符型并打印出来)
查看>>
【数据结构】动态栈的实现
查看>>
【数据结构】简单的迷宫(用递归实现)
查看>>