python logging模块使用_python - logging模块使用 (一)

功能

格式化日志输出

提供各种日志载体,其中有文本日志、控制台日志、数据库日志,sock等

本文存在的意义

如何实现自己的日志载体

如何将自己的载体添加到logging中

如何自定义自己的日志级别

类图

0818b9ca8b590ca3270a3433284dd417.png

如何将日志输出到QTextBrowser中,以下为简单的实现

# coding=utf-8

__author__ = 'zouxiaoliang'

import logging

from PyQt4 import QtGui

class Log4zTextBrowser(logging.Handler):

"""

实现一个appender,将调用log4z打印的日志输出到QtGui.QTextBrowser中

已测试:传入一个QtGui.QTextBrowser的引用时,可以将日志输出到QtGui.QTextBrowser中

未测试:不传入的情况

"""

def __init__(self, qt4_text_browser, level=logging.NOTSET):

logging.Handler.__init__(self, level)

self.set_name("Log4zTextBrowser")

self.qt4_text_browser = qt4_text_browser

if None == self.qt4_text_browser:

self.log_widget = QtGui.QWidget()

self.qt4_text_browser = QtGui.QTextBrowser(self.log_widget)

self.log_witget.show()

pass

def emit(self, record):

"""

实现父类纯虚方法

:param record: 需要记录的日志信息

:return: 无

"""

try:

msg = self.format(record)

self.acquire()

fs = "write error, msg:%s"

try:

ufs = u"%s"

self.qt4_text_browser.append(ufs % msg)

except UnicodeError:

print(fs % msg.encode("utf-8"))

except (KeyboardInterrupt, SystemExit):

raise

except:

self.handleError(record)

finally:

self.release()

pass

pass

在上面的源代码中,我们继承了logging.Handle类实现了接口emit,这个在C++中emit理解为一个纯虚函数,子类必须实现。

这个接口的作用是,当有日志需要输出时,父类会调用这个接口将日志输出到自定义的handle中。

如何将自定义的appender注册到logging框架中

browser_handle = Log4zTextBrowser(qt4_text_browser_handle)

# 设置当前handle最低的日志级别

browser_handle.setLevel(TRACE)

# 设置日志的输出格式

if None == log_formatter:

ui_formatter = logging.Formatter(fmt='[%(asctime)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

else:

ui_formatter = log_formatter

browser_handle.setFormatter(ui_formatter)

# 将自定义的appender对象注册到logging中

logging.getLogger('').addHandler(browser_handle)

如何自定义日志级别

# 扩展日志级别

log4z_level = {

TRACE: "TRACE",

"TRACE": TRACE,

}

# 将日志级别添加到logging中

logging.addLevelName(TRACE, log4z_level[TRACE])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值