5

python之logging模块详解

 3 years ago
source link: https://blogread.cn/it/article/7430?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

python之logging模块详解

浏览:927次  出处信息

   一、简单的将日志打印到屏幕

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

   屏幕上打印:

   WARNING:root:This is warning message

   默认情况下,logging将日志打印到屏幕,日志级别为WARNING;

   日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

   二、通过logging.basicConfig函数对日志的输出格式及方式做相关配置

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

   ./myapp.log文件中内容为:

Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

   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.WARNING

   stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

   三、将日志同时输出到文件和屏幕

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')

#################################################################################################
#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#################################################################################################

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

   屏幕上打印:

   root        : INFO     This is info message

   root        : WARNING  This is warning message

   ./myapp.log文件中内容为:

   Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message

   Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message

   Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

   四、logging之日志回滚

import logging
from logging.handlers import RotatingFileHandler

#################################################################################################
#定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M
Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
Rthandler.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)
################################################################################################

   从上例和本例可以看出,logging有一个日志处理的主对象,其它处理方式都是通过addHandler添加进去的。

   logging的几种handle方式如下:

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

   logging.FileHandler: 日志输出到文件

   日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler

logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler
logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler:  远程输出日志到UDP sockets
logging.handlers.SMTPHandler:  远程输出日志到邮件地址
logging.handlers.SysLogHandler: 日志输出到syslog
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

   由于StreamHandler和FileHandler是常用的日志处理方式,所以直接包含在logging模块中,而其他方式则包含在logging.handlers模块中,

   上述其它处理方式的使用请参见python2.5手册!

   五、通过logging.config模块配置日志

#logger.conf
###############################################
[loggers]
keys=root,example01,example02
[logger_root]
level=DEBUG
handlers=hand01,hand02
[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0
[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0
###############################################
[handlers]
keys=hand01,hand02,hand03
[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
args=('myapp.log', 'a')
[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form02
args=('myapp.log', 'a', 10*1024*1024, 5)
###############################################
[formatters]
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=

   import logging

   import logging.config

   logging.config.fileConfig(“logger.conf”)

   logger = logging.getLogger(“example01″)

   logger.debug(‘This is debug message’)

   logger.info(‘This is info message’)

   logger.warning(‘This is warning message’)

   import logging

   import logging.config

   logging.config.fileConfig(“logger.conf”)

   logger = logging.getLogger(“example02″)

   logger.debug(‘This is debug message’)

   logger.info(‘This is info message’)

   logger.warning(‘This is warning message’)

   六、logging是线程安全的

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

Recommend

  • 31
    • cuiqingcai.com 6 years ago
    • Cache

    Python中logging模块的基本用法

    在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程。 整个演讲的内容包括: 为什么日志记录非...

  • 42

  • 5

    3 min readPython模块学习之Logging日志模块2019-01-13最近一直想自己的批量框架,参考了POC-T框架和sqlmap的框架结构,发现logging模块被大量用来处理控制台输出以及日志记录,鉴于我自己也要写框架,那么本文就记录下我的logging模块学习记录。...

  • 6
    • www.biaodianfu.com 3 years ago
    • Cache

    Python 日志模块logging的使用

    术→技巧, 研发 Python 日志模块logging的使用 钱魏Way · 2021-07-...

  • 4

    1万字详解 python logging日志模块 说到日志,无论是写框架代码还是业务代码,都离不开日志的记录,他能给我们定位问题带来极大的帮助。 记录日志最简单的方法就是在你想要记录的地方加上一句 print , 我相信无论是新手还是老鸟都经常这么干。...

  • 8
    • foofish.net 2 years ago
    • Cache

    python logging 日志模块续

    在上一篇文章1万字详解 python logging日志模块 中,深入浅出的讲解了日志的基本原理与用法。但还有一些内容并没有涉及到,所以这篇文章作为上一篇文章的补充。希望这两篇文章能帮助你完全理解日志模块的使用,...

  • 1
    • www.linuxzen.com 2 years ago
    • Cache

    logging 模块误用导致的内存泄露

    Home Menu...

  • 6
    • sineatos.github.io 2 years ago
    • Cache

    Python标准库: logging模块——日志

    1. 简单例子 import logging logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG) logging.debug('this is a message') 运行上面例子的代码,将会在程序的根目录...

  • 2

    .Net Core Logging模块源码阅读 前言# 在Asp.Net Core Webapi项目中经常会用到ILogger,...

  • 2

    哈喽大家好,我是咸鱼 今天跟大家分享一个使用 Python 的 logging 模块写入日志文件时遇到的权限问题,不知道你们有没有遇到过 1.案例现象 今天上班的时候手机短信收到了 zabbix 告警,但是发现了不对劲的地方:微信没有收到...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK