Logging 模块学习笔记

<h4>快速开始</h4> <p>日志级别 <br />权值</p> <p>CRITICAL <br />50</p> <p>ERROR <br />40</p> <p>WARNING <br />30</p> <p>INFO <br />20</p> <p>DEBUG <br />10</p> <p>NOTSET <br />0</p> <p>除<code>NOTSET</code>外,<code>logging</code>模块提供了与级别名称对应的小写函数以便快速调用。 <br />样例代码:</p> <pre><code>import logging

def main(): logging.critical("critical") logging.error("error") logging.warning("warning") logging.info("info") logging.debug("debug")

if name == 'main': main()</code></pre>

<p>输出:</p>

<blockquote> <p>CRITICAL:root:critical <br />ERROR:root:error

<br />WARNING:root:warning</p>

</blockquote>

<p>从输出可以注意到<code>WARNING</code>以下级别的信息并没有打印出来。

<br />原因在于<code>logging</code>默认的级别是<code>WARNING</code>,可以通过<code>logging.basicConfig</code>函数或修改默认<code>Logger</code>对象来改变级别。

<br />默认输出格式为:</p>

<blockquote> <p>级别:Logger对象名:日志</p> </blockquote>

<h4>basicConfig函数</h4>

<p>basicConfig函数可以快速定制默认<code>Logger</code>对象。</p>

<h5>参数名</h5>

<h6>filename</h6>

<p>指定日志文件的名称。</p>

<h6>filemode</h6>

<p>指定日志文件的打开方式,有<code>w</code>和<code>a</code>两个选项,默认为<code>a</code>。</p>

<h6>format</h6>

<p>指定输出的格式和内容,格式为:</p>

<blockquote> <p>%(名称)格式控制字符串</p> </blockquote>

<p>格式列表与其对应的类型</p>

<ul> <li><strong>levelno</strong> <code>s</code>: 打印日志级别的数值 </li>

<li><strong>levelname</strong> <code>s</code>: 打印日志级别名称 </li>

<li><strong>pathname</strong> <code>s</code>: 打印当前执行程序的路径,其实就是<code>sys.argv[0]</code></li>

<li><strong>filename</strong> <code>s</code>: 打印当前执行程序名 </li>

<li><strong>funcName</strong> <code>s</code>: 打印日志的当前函数 </li>

<li><strong>lineno</strong> <code>d</code>: 打印日志的当前行号 </li>

<li><strong>asctime</strong> <code>s</code>: 打印日志的时间 </li>

<li><strong>thread</strong> <code>d</code>: 打印线程ID </li>

<li><strong>threadName</strong> <code>s</code>: 打印线程名称 </li>

<li><strong>process</strong> <code>d</code>: 打印进程ID </li>

<li><strong>message</strong> <code>s</code>: 打印日志信息</li> </ul>

<h6>datefmt</h6>

<p>指定时间格式,格式同<code>time.strftime</code>,影响<code>format</code>中<code>asctime</code>的格式。</p>

<h6>level</h6>

<p>设置日志级别,默认为<code>logging.WARNING</code>。</p>

<h6>stream</h6>

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

<h4>Logger对象</h4>

<p><code>logging.getLogger</code>函数返回一个<code>Logger</code>对象,函数接收一个字符串用以描述希望返回的<code>Logger</code>对象的名称,相同的名称全局唯一对应一个<code>Logger</code>对象。缺省参数为<code>root</code>,返回默认<code>Logger</code>对象。</p>

<h5>Logger对象的方法</h5>

<h6>setLevel</h6>

<p>设置该<code>Logger</code>对象的记录级别。

<br />参数:</p>

<ol> <li><strong>level</strong>:级别枚举</li> </ol>

<h6>log</h6>

<p>打印指定级别的日志,须先设置handler。 <br />参数:</p>

<ol> <li><strong>level</strong>:级别枚举。 </li>

<li><strong>msg</strong>:希望打印的对象,会自动转为字符串。如果参数已是字符串,可以是格式字符串。 </li>

<li><strong>*args</strong>:与msg结合成待打印内容<code>(msg % args)</code>。</li> </ol>

<h6>critical / error / warning / info / debug</h6>

<p>指定对应级别的调用<code>log</code>。

<br />参数:</p>

<ol> <li><strong>msg</strong>:希望打印的对象,会自动转为字符串。如果参数已是字符串,可以是格式字符串。 </li>

<li><strong>*args</strong>:与msg结合成待打印内容(msg % args)。</li> </ol>

<h6>addHandler</h6>

<p>给<code>Logger</code>对象添加处理器,可添加多个。

<br />参数:</p>

<ol> <li><strong>hdlr</strong>:处理器对象。</li> </ol>

<h6>removeHandler</h6>

<p>移除<code>Logger</code>对象的指定处理器。

<br />参数:</p>

<ol> <li><strong>hdlr</strong>:处理器对象。</li> </ol>

<h4>日志处理器</h4>

<p>处理器用来扩展<code>Logger</code>对象,通过<code>logger.addHandler(hdlr)</code>方法加载到<code>Logger</code>对象。</p>

<h5>模块集成处理器对象</h5>

<ul> <li><strong>logging.StreamHandler</strong>:日志输出到流,可以是<code>sys.stderr</code>、<code>sys.stdout</code>或者文件。 </li>

<li><strong>logging.FileHandler</strong>:日志输出到文件。 </li>

<li><strong>logging.handlers.SocketHandler</strong>:远程输出日志到TCP/IP sockets。 </li>

<li><strong>logging.handlers.DatagramHandler</strong>: 远程输出日志到UDP sockets。 </li>

<li><strong>logging.handlers.SMTPHandler</strong>: 远程输出日志到邮件地址。 </li>

<li><strong>logging.handlers.SysLogHandler</strong>:日志输出到syslog。 </li>

<li><strong>logging.handlers.NTEventLogHandler</strong>:远程输出日志到Windows NT/2000/XP的事件日志。 </li>

<li><strong>logging.handlers.MemoryHandler</strong>:日志输出到内存中的制定buffer。 </li>

<li><strong>logging.handlers.HTTPHandler</strong>:通过<code>GET</code>或<code>POST</code>远程输出到HTTP服务器。 </li>

<li><strong>logging.handlers.BaseRotatingHandler</strong>:日志回滚。 </li>

<li><strong>logging.handlers.RotatingFileHandler</strong>:日志回滚,实际用。 </li>

<li><strong>logging.handlers.TimedRotatingFileHandler</strong>:日志回滚,实际用。</li> </ul>

<h5>处理器使用简示</h5>

<h6>logging.StreamHandler</h6>

<p><code>logging.StreamHandler</code>对象构造参数缺省为<code>sys.stdout</code>,参数可以接收一个流对象(<code>sys.stderr</code>、<code>sys.stdout</code>或者文件)。</p>

<pre><code>sh1 = logging.StreamHandler() sh2 = logging.StreamHandler(sys.stdout) sh3 = logging.StreamHandler(open(file_path,&quot;w&quot;)) # w 和 a 皆可</code></pre>

<p><code>logging.StreamHandler</code> 对象能够设置记录的日志级别,但实际输出受<code>Logger</code>对象的级别限制。<code>Logger</code>对象的级别制约着消息的派发,<code>Handler</code>对象的级别制约着记录。</p>

<pre><code>sh2 = logging.setLevel(logging.WARING) sh3 = logging.setLevel(logging.INFO)</code></pre>

<p><code>logging.StreamHandler</code> 对象能够自定义输出格式。</p>

<pre><code>fmt = logging.Formatter(&quot;%(name)s:%(levelname)s:%(message)s&quot;) sh1.setFormatter(fmt)</code></pre>

<h4>更多资料</h4>

<ul> <li><a href="http://docs.python.org/2/library/logging.html">官方文档</a></li>

<li><a href="http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html">python 的日志logging模块学习</a></li>

<li><a href="http://blog.csdn.net/fxjtoday/article/details/6307285">Python标准模块logging</a></li> </ul>

<hr />

<blockquote> <p>@<a href="http://mrlyc.blogspot.com/">LYC</a>

<br />转载请注明<a href="http://mrlyc.blogspot.com/">出处</a>。</p></blockquote>

转载于:https://my.oschina.net/IMLYC/blog/225314

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值