博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python标准库-日志logging
阅读量:5047 次
发布时间:2019-06-12

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

1、模块级别

默认情况下logging模块将日志打印到了标准输出,且只显示了级别大于等于warning的日志信息,所以它的默认级别是warning.

日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

#!/usr/bin/env python# _*_ coding: utf-8 _*_# __author__ ='kong'import loggingimport time # 日志的输出级别print logging.NOTSETprint logging.DEBUG print logging.INFOprint logging.WARNINGprint logging.ERRORprint logging.CRITICALtime.sleep(1)logging.debug("debug message")# 默认的日志输出级别logging.warn("warn message")logging.error("error message")logging.critical("critical message")

  输出

 2、logging.basicConfi([**kwargs])

  语法:

def basicConfig(**kwargs):    """    Do basic configuration for the logging system.    This function does nothing if the root logger already has handlers    configured. It is a convenience method intended for use by simple scripts    to do one-shot configuration of the logging package.    The default behaviour is to create a StreamHandler which writes to    sys.stderr, set a formatter using the BASIC_FORMAT format string, and    add the handler to the root logger.    A number of optional keyword arguments may be specified, which can alter    the default behaviour.    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.    Note that you could specify a stream created using open(filename, mode)    rather than passing the filename and mode in. However, it should be    remembered that StreamHandler does not close its stream (since it may be    using sys.stdout or sys.stderr), whereas FileHandler closes its stream    when the handler is closed.    """

  logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为.

可用的参数: filename: 用指定的文件名创建FileHandler,这样日志会被存储在指定的文件中 filemode:文件打开的方式,在指定了filename时使用,默认值为a format:指定handler使用的日志显示格式 datefmt:指定日期时间格式 level:设置rootlogger的日志级别 stream:用指定的stream创建StreamHandler,可指定输出到sys.stderr,sys.stdout或者文件,默认sys.stderr format参数可能用到的格式化串: %(name)s:Logger的名字 %(levelno)s:数字形式的日志级别 %(levelname)s:文本形式的日志级别 %(pathname)s:调用日志输出函数的模块的文件名 %(module)s:调用日志输出函数的模块名 %(funcName)s:调用日志输出函数的函数名 %(lineno)d:调用日志输出函数的语句所在的代码行 %(created)f:当前时间,用UNIX标准的表示 时间的浮点数表示 %(relativeCreated)d:输出日志信息时,自Logger创建以来的毫秒数 %(asctime)s:字符串形式的当前时间。默认格式2003-07-12 16:23:26,345 %(thread)d:线程ID %(threadName)s:线程名 %(process)d:进程ID %(message)s:用户输出的消息
datefmt格式: %Y:年份的长格式,1999 %y:年份的短格式,99 %m:月份 01-12 %d:日期,01-31 %H:小时,0-23 %M:分钟,00-59 %S:秒,00-59
  基本用法示例代码:
#!/usr/bin/env python# _*_ coding: utf-8 _*_# __author__ ='kong'import loggingclass TestLogging(object):    def __init__(self):        logFormat = '%(asctime) -12s %(levelname) -8s %(name) -10s %(message) -12s'        logFileName = './testLog.txt'        logging.basicConfig(level = logging.INFO,format=logFormat,filename=logFileName,filemode='w')        logging.debug("debug message")        logging.info("info message")        logging.error("error message")        logging.critical("critical message")if __name__ == '__main__':    T = TestLogging()结果:2017-01-15 12:26:42,424 INFO     root       info message2017-01-15 12:26:42,424 ERROR    root       error message2017-01-15 12:26:42,424 CRITICAL root       critical message

  

  自定义模块myLog

#!/usr/bin/env python # _*_ coding: utf-8 _*_ # __author__ ='kong' import logging import getpass import sys class MyLog(object):     def __init__(self):         # 为当前用户创建日志实例,设置默认日志级别         user = getpass.getuser()         self.logger = logging.getLogger(user)         self.logger.setLevel(logging.DEBUG)         Formatter = logging.Formatter('%(asctime) -12s %(levelname) -8s %(name) -10s %(message) -12s')         """         Initialize the formatter with specified format strings.         Initialize the formatter either with the specified format string, or a         default as described above. Allow for specialized date formatting with         the optional datefmt argument (if omitted, you get the ISO8601 format).         """         # 创建文件句柄,设置日志格式、日志级别         logFile = './' + sys.argv[0][0:3] + '.log'         logHand = logging.FileHandler(logFile)         logHand.setLevel(logging.ERROR)  # 错误级别以上信息才会写到文件中         logHand.setFormatter(Formatter)         """         Set the formatter for this handler.         """         # 创建stream句柄,设置日志格式         logHandSt = logging.StreamHandler()         logHandSt.setFormatter(Formatter)         # 应用文件句柄和stream句柄,来处理日志         self.logger.addHandler(logHand)         self.logger.addHandler(logHandSt)         logging.basicConfig()     def debug(self,msg):         self.logger.debug(msg)     def info(self,msg):         self.logger.info(msg)     def warn(self,msg):         self.logger.warn(msg)     def error(self,msg):         self.logger.error(msg)     def critical(self,msg):         self.logger.critical(msg) if __name__ == '__main__':     T = MyLog()     T.debug("debug message")     T.info("info message")     T.warn("warn message")     T.error("error message")     T.critical("crital message")

  

 详见:

http://blog.csdn.net/zyz511919766/article/details/25136485/

http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

 示例参考:

#!/usr/bin/env python# _*_ coding:utf-8 _*_import logging.configimport datetimeimport os# 基路径BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 时间模块ToDay = datetime.date.today()YsDay = ToDay - datetime.timedelta(days=1)ToDay = ToDay.strftime('%Y-%m-%d')YsDay = YsDay.strftime('%Y-%m-%d')# 创建日志目录logdir = os.path.join(BaseDir,'log',ToDay)if not os.path.exists(logdir):os.makedirs(logdir)# 定义三种日志输出格式standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \                  '[%(levelname)s][%(message)s]'simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'def log_handle(logname='default'):    LOG_PATH = os.path.join(logdir, logname + '.log')  # 日志文件名称    LOGGING_DIC = {        'version': 1,        'disable_existing_loggers': False,        'formatters': {            'standard': {                'format': standard_format            },            'simple': {                'format': simple_format            },            'id_simple': {                'format': id_simple_format            },        },        'filters': {},        'handlers': {            # 打印到终端的日志            'console': {                'level': 'DEBUG',                'class': 'logging.StreamHandler',  # 打印到屏幕                'formatter': 'simple'            },            # 打印到文件的日志,收集info及以上的日志            'collect': {                'level': 'DEBUG',                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件                'formatter': 'simple',                'filename': LOG_PATH,  # 日志文件                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M                'backupCount': 5,                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了            },        },        'loggers': {            '': {                'handlers': ['console', 'collect'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕                'level': 'DEBUG',                'propagate': False,  # 向上(更高level的logger)传递            },        },    }    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的 log 配置    logger = logging.getLogger()  # 生成一个log实例    return logger

 

 

转载于:https://www.cnblogs.com/kongzhagen/p/6286742.html

你可能感兴趣的文章
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>
Openstack neutron:SDN现状
查看>>
python 打印对象的所有属性值的方法
查看>>
HDU 1160 FatMouse's Speed (最长有序的上升子序列)
查看>>
[数字图像处理]常见噪声的分类与Matlab实现
查看>>
开发指南专题六:JEECG微云高速开发平台代码生成
查看>>
node-gyp rebuild 卡住?
查看>>
maven filter不起作用
查看>>
redis从入门到放弃 -> 管理实战&数据类型
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
javascript学习---BOM
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>