python之logging模块使用

#!/usr/bin/env python
# encoding: utf-8
import logging
#定义handler的输出格式
formatter=logging.Formatter(‘%(asctime)s--%(name)s--%(filename)s--%(message)s‘)
#创建一个handler,用于写入日志文件,只输出debug级别以上的日志
fh=logging.FileHandler(‘test.log‘)
fh.setFormatter(formatter)
#再创建一个handler,用于输出到控制台
ch=logging.StreamHandler()
ch.setFormatter(formatter)
#创建一个logging命名为mylogger,%(name)s可调用这个名字
logger=logging.getLogger(‘mylogger‘)
logger.setLevel(logging.DEBUG)
#给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)
#记录两条日志
logger.info(‘foorbar‘)
logger.debug(‘just a test‘)
 
[[email protected] ~/Documents/python/reboot]$ python loggers.py
2017-03-01 15:21:22,434--mylogger--loggers.py--foorbar
2017-03-01 15:21:22,435--mylogger--loggers.py--just a test

Logging Formatter的参数:

  • %(name)s Name of the logger (logging channel)
  • %(levelno)s Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  • %(levelname)s Text logging level for the message ("DEBUG", "INFO" "WARNING", "ERROR", "CRITICAL")
  • %(pathname)s Full pathname of the source file where the logging call was issued (if available)
  • %(filename)s Filename portion of pathname
  • %(module)s Module (name portion of filename)
  • %(lineno)d Source line number where the logging call was issued (if available)
  • %(funcName)s Function name
  • %(created)f Time when the LogRecord was created (time.time() return value)
  • %(asctime)s Textual time when the LogRecord was created
  • %(msecs)d Millisecond portion of the creation time
  • %(relativeCreated)d Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded (typically at application startup time)
  • %(thread)d Thread ID (if available)
  • %(threadName)s Thread name (if available)
  • %(process)d Process ID (if available)
  • %(message)s The result of record.getMessage(), computed just as the record is emitted

function 封装logging日志调用
    loggers.py中封装log日志 调用。内容如下:

import loggingdef InitLogger(filename,level,name):    
    #create a logging object    
    logger = logging.getLogger()    
    logger.setLevel(level)    
    #format log file    
    formatter = logging.Formatter(‘%(asctime)s %(name)s-%(levelname)s-%(filename)s-[line:%(lineno)s]: %(message)s‘)    
    #create the logging file handler and format the log file    
    fh = logging.FileHandler(filename,mode=‘a+‘)    
    fh.setFormatter(formatter)    
    #create logging print Stream    
    ch = logging.StreamHandler()    
    ch.setFormatter(formatter)    
    #logger object load the hander    
    logger.addHandler(fh)    
    logger.addHandler(ch)    
    return logger

调用日志:

import loggers,logging
logger=loggers.InitLogger(‘./testfile.log‘,logging.INFO,‘test‘)
logger.info("print info level log one line")

查看testfile.log日志文件

[[email protected] ~/Documents/python/reboot]$ cat testfile.log
2017-03-01 15:45:15,974 root-INFO-sys.py-[line:6]: print info level log one line

方法二:Basic Demo

#filename:Loggers.py
def LoggingDemo():
    InitLogging(‘./test.log‘)
    logging.debug("this is debug message")
    logging.info("this is info message")
    logging.warning("this is warning message")
    logging.error("this is error message")
def InitLogging(logfilename):
    logging.basicConfig(level=logging.DEBUG,
        format=‘%(asctime)s %(name)s-%(levelname)s-%(filename)s-[line:%(lineno)s]: %(message)s‘,
        datefmt=logfilename,
        filemode=‘w‘,
        filename=logfilename
        );
if __name__==‘__main__‘:
    LoggingDemo()
basicConfig参数:
  • filename Specifies that a FileHandler be created, using the specified filename, rather than a StreamHandler.
  • filemode Specifies the mode to open the file, if filename is specified (if filemode is unspecified, it defaults to ‘a‘).
  • format Use the specified format string for the handler.
  • datefmt Use the specified date/time format.
  • level Set the root logger level to the specified level.
  • stream Use the specified stream to initialize the StreamHandler. Note that this argument is incompatible with ‘filename‘ - if both are present, ‘stream‘ is ignored.
调用:
#!/usr/bin/env python
# encoding: utf-8
import loggers,logging
loggers.LoggingDemo()

推荐使用方式:

import logging,logging.handlers
    ‘‘‘
    思路
    1,通过函数,实例化一个LOGGER对象
    2,函数实例化logger对象后,并对对象座位返回值,即return logger
    3,其他模块直接调用模块中的函数即可,简单方便
    ‘‘‘
    #定义写日志的函数,返回一个实例化的logger对象,直接配置logger参数的形式
def WriteLog(log_name):
    log_filename=‘./test.log‘
    log_level=logging.DEBUG
    format = logging.Formatter(‘%(asctime)s %(name)s-%(levelname)s-%(filename)s-[line:%(lineno)s]: %(message)s‘)
    handler = logging.handlers.RotatingFileHandler(log_filename,mode=‘a‘,maxBytes=10*1024*1024,backupCount=5)
    handler.setFormatter(format)
    logger = logging.getLogger(log_name)
    logger.addHandler(handler)
    logger.setLevel(log_level)
    return logger
if __name__==‘__main__‘:
    WriteLog(‘api‘).info(‘this is test‘)

调用:

#!/usr/bin/env python
# encoding: utf-8
import loggers,logging
loggers.WriteLog(‘api-2‘).info(‘sys file test log‘)

以配置文件方式配置logger:

logger.conf:

#定义logger模块,root是父类,必须存在,其他的是自定义
#logging.getLogger(NAME)就相当于向logging模块注册了实例化了
#name中用,表示 log的继承关系
[loggers]
keys=root,exp01,exp02
#[logger_xxx] logger_模块名称
#level 级别,级别有DEBUG,INFO,WARNING,ERROR,CRITICAL
#handlers 处理类,可以有多个,用逗号分割
#qualname logger名称,应用程序通过logging.getLogger获取.对于不能获取的名称,则记录到root模块
#propagate 是否继承父类的LOG信息,0:否,1:是
[logger_root]
level=DEBUG
handlers=hand01,hand02
 
[logger_exp01]
handlers=hand01,hand02
qualname=exp01
propagate=0
 
[logger_exp02]
handlers=hand01,hand02
qualname=exp02
#[handler_xxx]
#class handler 类名
#level 日志级别
#formatter 上边定义的formatter
#args handler初始化函数参数
[handlers]
keys=hand01,hand02
 
[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)
 
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
args=(‘test.log‘,‘a‘)
#和上边的格式一样formatter_XXX 用来格式化日志
[formatters]
keys=form01,form02
 
[formatter_form01]
format=%(asctime)s %(name)s-%(levelname)s-%(filename)s-[line:%(lineno)s]: %(message)s
datefmt=%a,%d %b %Y %H:%M:%S
 
[formatter_form02]
format=%(asctime)s %(name)s-%(levelname)s-%(filename)s-[line:%(lineno)s]: %(message)s
datefmt=%a,%d %b %Y %H:%M:%S
配置文件读取:
#!/usr/bin/env python
# encoding: utf-8
import logging,logging.config
logging.config.fileConfig("logger.conf") #配置文件名称
logger = logging.getLogger("exp01") #调用日志模版,默认一定是root
logger.debug(‘this is debug‘)
logger.info(‘this is info‘)
logger.warning(‘this is warning‘)

执行输出:

[[email protected] ~/Documents/python/reboot]$ python sys.py
Thu,02 Mar 2017 14:29:04 exp01-INFO-sys.py-[line:7]: this is info
Thu,02 Mar 2017 14:29:04 exp01-WARNING-sys.py-[line:8]: this is warning

文件输出:

[[email protected] ~/Documents/python/reboot]$ cat test.log
Thu,02 Mar 2017 14:03:41 exp01-DEBUG-sys.py-[line:6]: this is debug
Thu,02 Mar 2017 14:03:41 exp01-INFO-sys.py-[line:7]: this is info
Thu,02 Mar 2017 14:03:41 exp01-WARNING-sys.py-[line:8]: this is warning

原文地址:https://www.aolens.cn/?p=1251

时间: 2024-10-02 20:34:17

python之logging模块使用的相关文章

python的logging模块

1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:Thisis warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为:CRITICAL > ER

python之logging模块的使用

python的logging模块是用来写日志的,是python的标准模块. logging的结构 查看logging的python源码,可知主要有四个类实现功能: Loggers:提供应用程序直接使用的接口,如相关的配置设置: Handlers:将Loggers产生的日志传到指定位置,设置日志保存的位置: Filters:对输出日志进行过滤操作: Formatters:控制日志的输出格式: 日志记录的级别 DEBUG:优先级10,记录调试的详细信息,只在调试时开启: INFO:优先级20,记录普

Python基础-----logging模块

#!/usr/bin/env python#-*- coding:utf-8 -*- ########################################################################################################################################################灵活配置日志级别,日志格式,输出位置#####################################

python使用logging模块方法 教程

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息:print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出: logging模块的日志级别 logging模块默认定义了以下几个日志等级,它允许开发人员自定义其他日

Python中logging模块的基本用法

在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 怎样进行日志记录相关配置 日志记录使用常见误区 下面我们来梳理一下整个演讲的过程,其实其核心就是介绍了 logging 模块的使用方法和一些配置. 日志记录的重要性 在开发过程中,如果程序运行出现了问题,我们是可以使用我们自己的 Debug 工具来检测到到底是哪一步出现了问题,如果出现了问题的话,

python中logging模块的使用

一.基本用法 只需要基本的配置,就可以使用了. import logging def fun2(): logging.basicConfig(filename="fun2.log",format="%(asctime)s %(message)s",level=logging.DEBUG) logging.debug("this is fun2 log") 二.进行详细配置 首先添加一个fileHandler来配置记录的文件,Formatter来设

python的logging模块详解

日志级别 >>>import logging >>>logging.NOTSET 0 >>>logging.DEBUG 10 >>>logging.INFO 20 >>>logging.WARN 30 >>>logging.ERROR 40 >>>logging.CRITICAL 50 >>>logging._levelNames {0:'NOTSET', 10:

使用python的logging模块

一.从一个使用场景开始 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 Python代码   import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh.setLevel(logging.DEBUG) # 再创建一个han

Python的logging模块、os模块、commands模块与sys模块

一.logging模块 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 > ERR