python实现的系统实用log类实例


Posted in Python onJune 30, 2015

本文实例讲述了python实现的系统实用log类。分享给大家供大家参考。具体如下:

每个系统都必不可少会需要一个log类,方便了解系统的运行状况和排错,python本身已经提供了一个logger了,很强大,只要稍微封装一下就可以放到自己的系统了,下面是我自己的log类

文件名:logger.py

"""This module takes care of the logging
logger helps in creating a logging system for the application 
Logging is initialised by function LoggerInit.
"""
import logging
import os
import sys
class logger(object):
  """Class provides methods to perform logging."""
  m_logger = None
  def __init__(self, opts, logfile):
    """Set the default logging path."""
    self.opts = opts
    self.myname = 'dxscs'
    self.logdir = '.'
    self.logfile = logfile
    self.filename = os.path.join(self.logdir, self.logfile)
  def loginit(self):
    """Calls function LoggerInit to start initialising the logging system."""
    logdir = os.path.normpath(os.path.expanduser(self.logdir))
    self.logfilename = os.path.normpath(os.path.expanduser(self.filename))
    if not os.path.isdir(logdir):
      try:
        os.mkdir(logdir)
      except OSError, e:
        msg = ('(%s)'%e)
        print msg
        sys.exit(1)
    self.logger_init(self.myname)
  def logger_init(self, loggername):
    """Initialise the logging system.
    This includes logging to console and a file. By default, console prints
    messages of level WARN and above and file prints level INFO and above.
    In DEBUG mode (-D command line option) prints messages of level DEBUG
    and above to both console and file.
    Args:
     loggername: String - Name of the application printed along with the log
     message.
    """
    fileformat = '[%(asctime)s] %(name)s: [%(filename)s: %(lineno)d]: %(levelname)-8s: %(message)s'
    logger.m_logger = logging.getLogger(loggername)
    logger.m_logger.setLevel(logging.INFO)
    self.console = logging.StreamHandler()
    self.console.setLevel(logging.CRITICAL)
    consformat = logging.Formatter(fileformat)
    self.console.setFormatter(consformat)
    self.filelog = logging.FileHandler(filename=self.logfilename, mode='w+')
    self.filelog.setLevel(logging.INFO)
    self.filelog.setFormatter(consformat)
    logger.m_logger.addHandler(self.filelog)
    logger.m_logger.addHandler(self.console)
    if self.opts['debug'] == True:
      self.console.setLevel(logging.DEBUG)
      self.filelog.setLevel(logging.DEBUG)
      logger.m_logger.setLevel(logging.DEBUG)
    if not self.opts['nofork']:
      self.console.setLevel(logging.WARN)
  def logstop(self):
    """Shutdown logging process."""
    logging.shutdown()
#test    
if __name__ == '__main__':
  #debug mode & not in daemon
  opts = {'debug':True,'nofork':True}
  log = logger(opts, 'dxscs_source.log')
  log.loginit()
  log.m_logger.info('hello,world')

执行结果:

终端和文件中都显示有:[2012-09-06 16:56:01,498] dxscs: [logger.py: 88]: INFO    : hello,world

如果只需要显示在文件中可以将debug和nofork选项都置为false

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python中迭代器(iterator)用法实例分析
Apr 29 Python
简单介绍Python中的readline()方法的使用
May 24 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
Python应用库大全总结
May 30 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
python实现布隆过滤器及原理解析
Dec 08 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
python实现在windows服务中新建进程的方法
Jun 30 #Python
python实现线程池的方法
Jun 30 #Python
python实现的简单FTP上传下载文件实例
Jun 30 #Python
编写Python CGI脚本的教程
Jun 29 #Python
Python访问纯真IP数据库脚本分享
Jun 29 #Python
Python实现把数字转换成中文
Jun 29 #Python
Python中if __name__ == '__main__'作用解析
Jun 29 #Python
You might like
PHP生成UTF8文件的方法
2010/05/15 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
php提取微信账单的有效信息
2018/10/01 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
python提取内容关键词的方法
2015/03/16 Python
浅析Python中signal包的使用
2015/11/13 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Pycharm调试程序技巧小结
2020/08/08 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
司机岗位职责
2015/02/04 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
交通安全月活动总结
2015/05/08 职场文书
正规欠条模板
2015/07/03 职场文书
基层党建工作简报
2015/07/21 职场文书
大学班长竞选稿
2015/11/20 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
对讲机的最大通讯距离是多少
2022/02/18 无线电