python re compile用法,python for循环

  

  本文主要对测井中的注意事项做了简要记录。   

  

     

  

  伐木。StreamHandler:日志输出到流,可以是sys.stderr、sys.stdout或文件日志。FileHandler:日志输出到文件。   

  

  回滚模式:实际使用中,RotatingFileHandler和timedrotatingfilehandlerlogging。经手人。baserotatinghandler日志记录。经手人。旋转filehandlerlogging。经手人。使用timedrotatingfilehandler。   

  

  logging . handlers . socket handler 3360远程输出日志到TCP/Ip套接字日志。handlers.datagramhandler 3360远程输出日志到UDP套接字日志记录。handlers.smtphandler 3360远程输出日志到电子邮件地址日志。handlers.sysloghandler 3360将输出记录到syslog日志中。经手人。nteventloghandler 3360,远程输出日志到Windows NT/2000/XP,记录日志。经手人。内存处理程序3360,将输出记录到内存缓冲区日志。经手人。Httphandler 3360,通过“GET”或“POST”远程输出到HTTP服务器   

  

  logging.basicConfig函数参数:filename:指定日志文件名filemode:与file函数含义相同。它指定日志文件的打开模式,而“W”或“A”format 3360指定输出的格式和内容。格式可以输出很多有用的信息。如上例所示: %(levelno)s:打印日志级别值%(levelname)s:打印日志级别名%(pathname)s:打印当前正在执行的程序的路径,实际上是sys.argv0 %(filename)s:打印当前正在执行的程序名%(funcName)s:打印日志当前函数%(lineno)d:打印日志当前行号%(asctime)s:打印日志时间%(thread) S:打印线程ID %(threadName)s 3:默认日志记录。WARNINGstream:指定日志的输出流,可以输出到sys.stderr、sys.stdout或文件,默认输出到sys.stderr。如果同时指定了stream和filename,则忽略该流。   

  

  logging . handlers . timedrotatingfilehandler(文件名、时间、间隔、备份计数、编码、延迟、utc)   

  

  与RotatingFileHandler相同,但文件的备份是由时间而不是大小控制的。   

  

  Interval是一个数字,when是指定单位的字符串。when的可接受值为“s”(秒)、“M”(分钟)、“H”(小时)、“D”(天)、“w”(周)和“midnight”(午夜备份)。例如,将interval设置为3并将when设置为“D”会产生每三天备份一次日志的效果。BackupCount指定要保存的备份文件的最大数量。Utc是一个布尔标志,用于确定是使用本地时间(默认值)还是UTC时间。   

  

  利用python中的日志库实现日志滚动和删除过期日志。日志库提供了两个可以用于日志滚动的类,一个是RotatingFileHandler,主要根据日志文件的大小进行滚动,另一个是TimeRotatingFileHandler,主要根据时间进行滚动。在实际应用中,我们通常按照时间滚动。因此,本文主要介绍TimeRotaingFileHandler(类似RotatingFileHandler)的使用方法。代码示例如下:   

  

  code class=' hljs python has-numbering ' style=' display : block;padding: 0pxcolor:继承;框定尺寸:边框-框;font-family :‘源码Pro’,等宽;font-size :未定义;空白: pre;border-top-left-radius : 0px;边框-顶部-右侧-ra   

dius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#!/usr/bin/env python</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#_*_coding:utf-8_*_</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># vim : set expandtab ts=4 sw=4 sts=4 tw=100 :</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> logging<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> time<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> re<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">from</span> logging.handlers <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> TimedRotatingFileHandler<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">from</span> logging.handlers <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> RotatingFileHandler<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">def</span> <span class="hljs-title" style="box-sizing: border-box;">main</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>:</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#日志打印格式</span> log_fmt = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'</span> formatter = logging.Formatter(log_fmt) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#创建TimedRotatingFileHandler对象</span> log_file_handler = TimedRotatingFileHandler(filename=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ds_update"</span>, when=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"M"</span>, interval=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, backupCount=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")</span> log_file_handler.setFormatter(formatter) logging.basicConfig(level=logging.INFO) log = logging.getLogger() log.addHandler(log_file_handler) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#循环打印日志</span> log_content = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test log"</span> count = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> count < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>: log.error(log_content) time.sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>) count = count + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> log.removeHandler(log_file_handler)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> __name__ == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"__main__"</span>: main()</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li></ul>filename:日志文件名的prefix;when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnightinterval: 滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件;backupCount: 表示日志文件的保留个数;除了上述参数之外,TimedRotatingFileHandler还有两个比较重要的成员变量,它们分别是suffix和extMatch。suffix是指日志文件名的后缀,suffix中通常带有格式化的时间字符串,filename和suffix由“.”连接构成文件名(例如:filename=“runtime”, suffix=“%Y-%m-%d.log”,生成的文件名为runtime.2015-07-06.log)。extMatch是一个编译好的正则表达式,用于匹配日志文件名的后缀,它必须和suffix是匹配的,如果suffix和extMatch匹配不上的话,过期的日志是不会被删除的。比如,suffix=“%Y-%m-%d.log”, extMatch的只应该是re.compile(r”^\d{4}-\d{2}-\d{2}.log$”)。默认情况下,在TimedRotatingFileHandler对象初始化时,suffxi和extMatch会根据when的值进行初始化: ‘S’: suffix=”%Y-%m-%d_%H-%M-%S”, extMatch=r”\^d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}”; ‘M’:suffix=”%Y-%m-%d_%H-%M”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}”; ‘H’:suffix=”%Y-%m-%d_%H”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}”; ‘D’:suffxi=”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”; ‘MIDNIGHT’:”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”; ‘W’:”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

  

如果对日志文件名没有特殊要求的话,可以不用设置suffix和extMatch,如果需要,一定要让它们匹配上。

  


  

相关文章