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爬虫番外篇之Cookie和Session详解
Dec 27 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python爬取网易云音乐评论
Nov 16 Python
django admin后台添加导出excel功能示例代码
May 15 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python 存取npy格式数据实例
Jul 01 Python
详解Python 最短匹配模式
Jul 29 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
php实现mysql封装类示例
2014/05/07 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
分析JS单线程异步io回调的特性
2017/12/01 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
Python中按键来获取指定的值
2019/03/02 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
自考生自我评价分享
2014/01/18 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
大班下学期个人总结
2015/02/13 职场文书
综治目标管理责任书
2015/05/11 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书