码迷,mamicode.com
首页 > 编程语言 > 详细

python--logging模块

时间:2018-06-05 19:56:21      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:code   std   process   处理   tor   内存耗尽   意义   变化   http   

#申明:本文章参考于http://www.cnblogs.com/dahu-daqing/p/7040764.html

logging模块简介

# logging模块是python内置的标准模块,主要用于输出程序的运行日志
# 可以设置输出日志的等级,日志保存路径,日志文件回滚等
# 比print具有如下优点
# 1.可以设置不同的日志等级,只输出重要信息,而不必显示大量的调试信息
# 2.print将所有信息都输出到标准输出中,严重开发者从标准输出中查看其它数据,而logging模块可以让开发者决定将信息输出到什么地方,以及怎么输出

logging模块的基本使用

import logging
logging.basicConfig(
    level=logging.INFO, # 这句可要可不要,真正有用的是下面的logger.setLevel(level)
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
)
logger = logging.getLogger(satori)
logger.setLevel(logging.INFO)   # 这里设置成info
logger.info(古明地盆)
logger.debug(芙兰朵露斯卡雷特)
logger.warning(古明地恋)
logger.info(mmp)
# 运行程序,控制台输出
‘‘‘
2018-06-05 14:12:20,160 - satori - INFO - 古明地盆
2018-06-05 14:12:20,160 - satori - WARNING - 古明地恋
2018-06-05 14:12:20,160 - satori - INFO - mmp
‘‘‘

# logging中可以选择很多消息级别,如debug,info,warning,error,critical。
# 通过赋予logger或者handler不同的级别,开发者就可以只输出错误信息到特定的记录文件,或者在调试时只记录调试信息

# 例如我们可以将logger的级别改成debug
logging.basicConfig(
    #level=logging.DEBUG,  # 将该句注释掉
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
)
logger = logging.getLogger(satori)
logger.setLevel(logging.DEBUG)  # 在这里设置,发现并不影响程序的运行结果
logger.info(古明地盆)
logger.debug(芙兰朵露斯卡雷特)
logger.warning(古明地恋)
logger.info(mmp)
# 运行程序,输出结果
‘‘‘
2018-06-05 14:12:20,160 - satori - INFO - 古明地盆
2018-06-05 14:12:20,160 - satori - DEBUG - 芙兰朵露斯卡雷特
2018-06-05 14:12:20,160 - satori - WARNING - 古明地恋
2018-06-05 14:12:20,160 - satori - INFO - mmp
‘‘‘

将日志写入到文件

# logging.basicConfig函数各参数:
# filename:指定日志文件名;
# filemode:和open函数意义相同,指定日志文件的打开模式,‘w‘或者‘a‘;
# format:指定输出的格式和内容,format可以输出很多有用的信息
# 参数
# %(levelno)s:打印日志级别的数值
# %(levelname)s:打印日志级别的名称
# %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
# %(filename)s:打印当前执行程序名
# %(funcName)s:打印日志的当前函数
# %(lineno)d:打印日志的当前行号
# %(asctime)s:打印日志的时间
# %(thread)d:打印线程ID
# %(threadName)s:打印线程名称
# %(process)d:打印进程ID
# %(message)s:打印日志信息
# datefmt:指定时间格式,同time.strftime();
# level:设置日志级别,默认为logging.WARNNING;
# stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
import logging
# 设置logging,创建一个filehandler,并对输出消息的格式进行设置,将其添加到logger中,然后将日志写入到指定的文件中
logger = logging.getLogger(古明地盆)  # 随便起什么名字
logger.setLevel(logging.INFO)  # 设置日志等级
# 使用logging.filehandler,说白了类似于open,创建一个log.txt文件,handler为文件描述符,就类似于f=open()中的f
handler = logging.FileHandler(log.txt,mode=a,encoding=utf-8)
# 为文件设置日志等级
handler.setLevel(logging.INFO)
# 用logging创建输出的格式
formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
# 将格式交给handler,等于handler把格式给吞掉了
handler.setFormatter(formatter)
# handler作为文件句柄,已经设置好等级,又吞掉了logging设置好的formatter格式。
# 此时的handler已经准备就绪,再让它被logger吞掉,此时的logger已经完善,便可开始打印日志。
logger.addHandler(handler)
# 关于设置等级,logger设置一次,handler又设置了一次。
# 设置两次不影响,可以将两个等级都设置一样,如果一方等级设置过高,即使另一方等级设置不高,那么也不会输出
# 可以将等级设置一样,保持一致

logger.info(古明地盆)
logger.debug(芙兰朵露斯卡雷特)
logger.warning(古明地恋)
logger.info(mmp)
# 执行程序,可以看到有一个txt文件,文件内容为
‘‘‘
2018-06-05 14:23:27,767 - 古明地盆 - INFO - 古明地盆
2018-06-05 14:23:27,767 - 古明地盆 - WARNING - 古明地恋
2018-06-05 14:23:27,767 - 古明地盆 - INFO - mmp
‘‘‘

将日志同时输出到文件和控制台

# logging中添加StreamHandler,可以将日志输出到屏幕上
import logging
logger = logging.getLogger(古明地盆)
logger.setLevel(level=logging.INFO)
handler = logging.FileHandler(log1.txt,a,encoding=utf-8)
handler.setLevel(logging.INFO)
formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
handler.setFormatter(formatter)

# 输出到控制台
console = logging.StreamHandler()  # 由于是输出到控制台,所不需要参数
console.setLevel(logging.INFO)  # 如果不指定格式,那么只输出普通的字符串
console.setFormatter(formatter)  # 指定格式,按照格式输出

logger.addHandler(console)
logger.addHandler(handler)

logger.info(古明地盆)
logger.debug(芙兰朵露斯卡雷特)
logger.warning(古明地恋)
logger.info(mmp)

# 输出结果,可以看到txt文件和控制台都会输出如下
‘‘‘
2018-06-05 19:10:11,995 - 古明地盆 - INFO - 古明地盆
2018-06-05 19:10:11,995 - 古明地盆 - WARNING - 古明地恋
2018-06-05 19:10:11,995 - 古明地盆 - INFO - mmp
‘‘‘
# 一些错误的等级
‘‘‘
FATAL:致命错误
CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
ERROR:发生错误时,如IO操作失败或者连接问题
WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
INFO:处理请求或者状态变化等日常事务
DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
‘‘‘

 

python--logging模块

标签:code   std   process   处理   tor   内存耗尽   意义   变化   http   

原文地址:https://www.cnblogs.com/traditional/p/9141424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!