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编程中实现迭代器的一些技巧小结
Jun 21 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
python 从csv读数据到mysql的实例
Jun 21 Python
python 实现倒排索引的方法
Dec 25 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
python基于tkinter制作无损音乐下载工具
Mar 29 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
Yii2单元测试用法示例
2016/11/12 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
Python的多态性实例分析
2015/07/07 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
小学数学教学经验交流材料
2014/05/22 职场文书
安全横幅标语
2014/06/09 职场文书
护士2014年终工作总结
2014/11/11 职场文书
生日赠语
2015/06/23 职场文书
小学入学感言
2015/08/01 职场文书
爱护公物主题班会
2015/08/17 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android