• 25 python日志模板logging


      1 --------1,日志的级别-------------------
      2 Level    Numeric value
      3 CRITICAL    50
      4 ERROR    40
      5 WARNING    30
      6 INFO    20
      7 DEBUG    10
      8 NOTSET    0
      9 
     10 值越小,打印出的日志越多
     11 级别高低顺序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
     12 如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出
     13 -----------------------------
     14 1.基本元素说明:
     15 
     16 Logger:用于输出的日志的总对象
     17 Handlers:用来指定log的输出方式
     18 Formatters:设置日志信息的结构和内容格式,默认的时间格式为%Y-%m-%d %H:%M:%S
     19 Filter:过滤器,用来过滤的输出内容(如:只输出debug以上的内容)
     20 
     21 ------------------------------
     22 2,Logger 常用函数
     23 
     24 LOG=logging.getLogger(”chat.gui”)   logging.getLogger([name])
     25 Logger.setLevel(lel)            ##:指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
     26 Logger.addFilter(filt)、Logger.removeFilter(filt)        ##:添加或删除指定的filter
     27 Logger.addHandler(hdlr)、Logger.removeHandler(hdlr)      ##:增加或删除指定的handler
     28 Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical()       ##:可以设置的日志级别
     29 Logger.log(“debug”,”This is a bug”)                      ##:可以通过这个函数直接输出内容并选择对应的告警级别
     30 
     31 
     32 
     33 3.Handlers 常用函数
     34 
     35 Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
     36 Handler.setFormatter():给这个handler选择一个格式
     37 Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象
     38 
     39 ---########################## 代码举例1 普通简单的##############################################
     40 import logging
     41 ##logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)   此名也是可以的
     42 logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO)
     43 logging.debug('This message should appear on the console')
     44 logging.info('This message should appear on the console')
     45 
     46 
     47 filemode="w" --表示发覆盖的方式写
     48 'a'  --- 表示追加
     49 
     50 
     51 ------############### 代码举例 ########################################################
     52 
     53 import logging
     54 
     55 # 创建一个logger
     56 logger = logging.getLogger('mylogger')
     57     ## 返回一个logger实例,如果没有指定name,返回root logger。
     58     ##只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。
     59     ##这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。
     60 logger.setLevel(logging.DEBUG)
     61 
     62 # 创建一个handler,用于写入日志文件
     63 fh = logging.FileHandler('test.log')
     64 fh.setLevel(logging.DEBUG)
     65 
     66 # 再创建一个handler,用于输出到控制台(通过handler对象可以把日志内容写到不同的地方)
     67 #1 StreamHandler: 输出到控制台
     68 #2 FileHandler:   输出到文件
     69 #3 BaseRotatingHandler 可以按时间写入到不同的日志中。比如将日志按天写入不同的日期结尾的文件文件。
     70 #4 SocketHandler 用TCP网络连接写LOG
     71 #5 DatagramHandler 用UDP网络连接写LOG
     72 #6 SMTPHandler 把LOG写成EMAIL邮寄出去
     73 ch = logging.StreamHandler()
     74 ch.setLevel(logging.INFO)
     75 
     76 # 定义handler的输出格式 (参数,请参照后面的说明)
     77 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
     78 fh.setFormatter(formatter)
     79 ch.setFormatter(formatter)
     80 
     81 # 给logger添加handler
     82 logger.addHandler(fh)
     83 logger.addHandler(ch)
     84 
     85 # 记录一条日志
     86 logger.info('foorbar')
     87 logger.debug('foorbar')
     88 
     89 ---输出说明:
     90     屏幕显示--由于定义的是INFO级别的日志,则只能打印出,级别高于等于INFO的信息
     91     文件打印--则可以打印出DEBUG及以上级别的日志
     92 
     93 
     94 
     95 -------------举例 2 -----------------------------
     96 #!/usr/local/bin/python
     97 # coding=utf-8 + BOM
     98 
     99 __author__ = 'Huang Yuan Yuan'
    100 
    101 import logging
    102 
    103 #用字典保存日志级别
    104 format_dict = {
    105 1:logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
    106 2:logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
    107 3:logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
    108 4:logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
    109 5:logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    110 }
    111 print('xxx')
    112 
    113 class Logger(object):
    114     def __init__(self, logname, loglevel, logger):
    115         '''
    116            指定保存日志的文件路径,日志级别,以及调用文件
    117            将日志存入到指定的文件中
    118         '''
    119 
    120     # 创建一个logger
    121         self.logger=logging.getLogger(logger)
    122         self.logger.setLevel(logging.DEBUG)
    123 
    124         # 创建一个handler,用于写入日志文件
    125         fh = logging.FileHandler(logname)
    126         fh.setLevel(logging.DEBUG)
    127 
    128         # 再创建一个handler,用于输出到控制台
    129         ch = logging.StreamHandler()
    130         ch.setLevel(logging.DEBUG)
    131 
    132         # 定义handler的输出格式
    133         #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    134         formatter = format_dict[int(loglevel)]
    135         fh.setFormatter(formatter)
    136         ch.setFormatter(formatter)
    137 
    138         # 给logger添加handler
    139         self.logger.addHandler(fh)
    140         self.logger.addHandler(ch)
    141 
    142     def getlog(self):
    143         return self.logger
    144 
    145 p_log= Logger(logname='log.txt', loglevel=1, logger="1.py")
    146 p_log.logger.info('aaaaaa')
    147 
    148 ---或者使用此方式
    149 logger= Logger(logname='log.txt', loglevel=1, logger="1.py").getlog()
    150 logger.info('cccc')
    151 
    152 
    153 ----------------------------------------------------------
    154 
    155 
    156 
    157 
    158 
    159 
    160 
    161 
    162 
    163 
    164 
    165 
    166 
    167 
    168 
    169 
    170 
    171 
    172 
    173 ------######################### 说明  ##############################################
    174 2.Handler种类
    175 
    176 logging.StreamHandler
    177 使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。
    178 它的构造函数是:StreamHandler([strm])
    179 其中strm参数是一个文件对象。
    180 默认是sys.stderr
    181 logging.FileHandler
    182 和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。
    183 它的构造函数是:FileHandler(filename[,mode])
    184 filename是文件名,必须指定一个文件名。
    185 mode是文件的打开方式。
    186 默认是’a’,即添加到文件末尾。
    187 logging.handlers.RotatingFileHandler
    188 这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把 文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建 chat.log,继续输出日志信息。
    189 它的构造函数是:RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
    190 其中filename和mode两个参数和FileHandler一样。
    191 maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
    192 backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。
    193 logging.handlers.TimedRotatingFileHandler
    194 这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
    195 TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
    196 其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。
    197 interval是时间间隔。
    198 when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
    199 S 秒
    200 M 分
    201 H 小时
    202 D 天
    203 W 每星期(interval==0时代表星期一)
    204 midnight 每天凌晨
    205 logging.handlers.SocketHandler
    206 logging.handlers.DatagramHandler
    207 以上两个Handler类似,都是将日志信息发送到网络。不同的是前者使用TCP协议,后者使用UDP协议。它们的构造函数是:
    208 Handler(host, port)
    209 其中host是主机名,port是端口名
    210 logging.handlers.SysLogHandler
    211 logging.handlers.NTEventLogHandler
    212 logging.handlers.SMTPHandler
    213 logging.handlers.MemoryHandler
    214 logging.handlers.HTTPHandler
    215 Formatters
    216 
    217 参数    含义
    218 %(name)s    Logger的名字
    219 %(levelno)s    数字形式的日志级别
    220 %(levelname)s    文本形式的日志级别
    221 %(pathname)s    调用日志输出函数的模块的完整路径名,可能没有
    222 %(filename)s    调用日志输出函数的模块的文件名
    223 %(module)s    调用日志输出函数的模块名
    224 %(funcName)s    调用日志输出函数的函数名
    225 %(lineno)d    调用日志输出函数的语句所在的代码行
    226 %(created)f    当前时间,用UNIX标准的表示时间的浮点数表示
    227 %(relativeCreated)d    输出日志信息时的,自Logger创建以 来的毫秒数
    228 %(asctime)s    字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    229 %(thread)d    线程ID。可能没有
    230 %(threadName)s    线程名。可能没有
    231 %(process)d    进程ID。可能没有
    232 %(message)s    用户输出的消息
    233 
    234 --------------------------------------------------------------
    235 1.python中配置logging有两种 方式:
    236 
    237   第 一种:基础配置
    238 
    239   logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO)
    240 
    241   basicConfig 用来在代码中配置日志
    242   filename指定 日志被保存到某个具体的文件
    243   filename设置 文件有写的权限
    244   format设置记录的属性, 比如时间、等级、信息等
    245   level指定记录 日志的等级(level以上)
    246   第 二种:使 用配置文件的方式配置logging,使 用下面的函数来读取配置文件
    247 
    248   fileConfig(filename,defaults=None,disable_existing_loggers=Ture )
    249 
    250   2.在logging.basicConfig()函数中可通过具体参数来更更改logging模块默认行为,可用参数有:
    251 
    252   filename: 用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样 日志会被存储在指定的文件中
    253   filemode: 文件打开方式,在指定了filename时使 用这个参数,默认值为“a”还可指定为“w”
    254   format: 指定handler使 用的 日志显示格式
    255   datefmt: 指定 日期时间格式
    256   level: 设置rootlogger(后边会讲解具体概念)的日志级别
    257   stream: 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr若同时列列出了filename和stream两个参数,则stream参数会被忽略。
    258   3.format参数中可能用到的格式化:
    259 
    260   (name)s Logger的名字 %(levelno)s 数字形式的日志级别 %(levelname)s 文本形式的日志级别
    261   (pathname)s 调用日志输出函数的模块的完整路路径名,可能没有
    262   (filename)s 调用日志输出函数的模块的 文件名
    263   (module)s 调用日志输出函数的模块名
    264   (funcName)s 调用日志输出函数的函数名
    265   (lineno)d 调用日志输出函数的语句句所在的代码行行
    266   (created)f 当前时间,用UNIX标准的表示时间的浮点数表示
    267   (relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 %(asctime)s 字符串串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 (thread)d 线程ID。可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。可能没有 %(message)s 用户输出的消息
  • 相关阅读:
    running Android Studio on Windows 7 fails, no Android SDK found
    Dalvik虚拟机简要介绍和学习计划
    免费HTTP上传文件控件WebUploadFile.ocx发布,让实现Word在线编辑器变得容易
    ASP.NET生成缩略图的代码
    C++ MFC 关于SelectObject,请解释下,谢谢
    Visual C++中MFC消息的分类
    深入思考全局静态存储区、堆区和栈区
    coredump简介与coredump原因总结
    c++函数中的 指针参数跟地址参数区别
    解决SWFUpload在Chrome、Firefox等浏览器下的问题
  • 原文地址:https://www.cnblogs.com/2mei/p/9254271.html
Copyright © 2020-2023  润新知