首页 > 编程语言 > 详细

python日志模块使用

时间:2019-08-13 21:34:14      阅读:94      评论:0      收藏:0      [点我收藏+]

? logging模块

 

? 简介

   • Python内置标准模块

  • 输出运行日志

  • 设置输出日志等级、日志保存路径、日志文件回滚

? 与print相比有以下优点

  • print把所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据

   • Logging则可以由开发者决定将信息输出到什么地方,以及怎么输出

? 使用

? 基本使用

import logging

logging.basicConfig(level = logging.INFO,format = %(asctime)s - %(name)s - %(levelname)s - %(message)s)

logger = logging.getLogger(__name__)

logger.info("Start print log")

logger.debug("Do something")

logger.warning("Something maybe fail.")

logger.info("Finish")

 

? Logging中可以选择很多消息级别

• CRITICAL > ERROR > WARNING > INFO > DEBUG

  • debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上

  • info : 打印info,warning,error,critical级别的日志,确认一切按预期运行

  • warning : 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”),这个软件还能按预期工作

  • error : 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能

  • critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行

 

? logging.basicConfig函数各参数

  • filename 指定日志文件名

  • filemode 和file函数意义相同,指定日志文件的打开模式,’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被忽略

 

? 将日志写入文件

? 设置logging,创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件中

   

import logging

logger = logging.getLogger(__name__)

logger.setLevel(level = logging.INFO)

handler = logging.FileHandler("log.txt")

handler.setLevel(logging.INFO)

formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)

handler.setFormatter(formatter)

logger.addHandler(handler)

 

logger.info("Start print log")

logger.debug("Do something")

logger.warning("Something maybe fail.")

logger.info("Finish")

 

 

   

 

? 将日志同时输出到屏幕

console = logging.StreamHandler()

console.setLevel(logging.WARNING)

formatter = logging.Formatter(%(asctime)s - %(message)s)

console.setFormatter(formatter)

logger.addHandler(console)

 

 

 

? 可以发现,logging有一个日志处理的主对象,其他处理方式都是通过addHandler添加进去,logging中包含的handler主要有如下几种

  • StreamHandler:logging.StreamHandler;日志输出到流,可以是sys.stderr,sys.stdout或者文件

   • FileHandler:logging.FileHandler;日志输出到文件

   • BaseRotatingHandler:logging.handlers.BaseRotatingHandler;基本的日志回滚方式

   • RotatingHandler:logging.handlers.RotatingHandler;日志回滚方式,支持日志文件最大数量和日志文件回滚

  • TimeRotatingHandler:logging.handlers.TimeRotatingHandler;日志回滚方式,在一定时间区域内回滚日志文件

   • SocketHandler:logging.handlers.SocketHandler;远程输出日志到TCP/IP sockets

   • DatagramHandler:logging.handlers.DatagramHandler;远程输出日志到UDP sockets

  • SMTPHandler:logging.handlers.SMTPHandler;远程输出日志到邮件地址

   • SysLogHandler:logging.handlers.SysLogHandler;日志输出到syslog

  • NTEventLogHandler:logging.handlers.NTEventLogHandler;远程输出日志到Windows NT/2000/XP的事件日志

  • MemoryHandler:logging.handlers.MemoryHandler;日志输出到内存中的指定buffer

  • HTTPHandler:logging.handlers.HTTPHandler;通过"GET"或者"POST"远程输出到HTTP服务器

 

? 使用示例

import logging

log_format = "%(levelname)s | %(asctime)s | %(pathname)s | funcName:%(funcName)s | lineno:%(lineno)s | message:%(message)s"
logging.basicConfig(level = logging.ERROR,format = log_format)

logger = logging.getLogger(__name__)
logger.setLevel(level = logging.DEBUG)


def add_file_handler(logger, filename):
    handler = logging.FileHandler(filename)
    handler.setLevel(logging.WARNING)
    logger.addHandler(handler)
    return logger

def add_stream_handler(logger):
    console = logging.StreamHandler()
    console.setLevel(logging.WARNING)
    logger.addHandler(console)

if __name__ == __main__:
    logger.info("Start print log")
    logger.debug("Do something")
    logger.warning("Something maybe fail.")
    logger.info("Finish")

 

python日志模块使用

原文:https://www.cnblogs.com/cityking5410/p/logging.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!