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删除java文件头上版权信息的方法
Jul 31 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
python魔法方法-属性访问控制详解
Jul 25 Python
python字符串string的内置方法实例详解
May 14 Python
python-opencv颜色提取分割方法
Dec 08 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
python自动点赞功能的实现思路
Feb 26 Python
python实现批量修改文件名
Mar 23 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
Python实现模拟登录及表单提交的方法
2015/07/25 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
python3 使用traceback定位异常实例
2020/03/09 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
2015年民主生活会发言材料
2014/12/15 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript