一、默认日志配置

在django 1.4中默认有一个简单的日志配置,如下

  1. # A sample logging configuration. The only tangible logging
  2. # performed by this configuration is to send an email to
  3. # the site admins on every HTTP 500 error when DEBUG=False.
  4. # See http://docs.djangoproject.com/en/dev/topics/logging for
  5. # more details on how to customize your logging configuration.
  6. LOGGING = {
  7. 'version': 1,
  8. 'disable_existing_loggers': False,
  9. 'filters': {
  10. 'require_debug_false': {
  11. '()': 'django.utils.log.RequireDebugFalse'
  12. }
  13. },
  14. 'handlers': {
  15. 'mail_admins': {
  16. 'level': 'ERROR',
  17. 'filters': ['require_debug_false'],
  18. 'class': 'django.utils.log.AdminEmailHandler'
  19. }
  20. },
  21. 'loggers': {
  22. 'django.request': {
  23. 'handlers': ['mail_admins'],
  24. 'level': 'ERROR',
  25. 'propagate': True,
  26. },
  27. }
  28. }

可以看出默认的‘disable_existing_loggers’值为False。

默认没有定义formatters。

字典中,组结束没有加逗号,所以在增加时需要写上。

二、简单例子

1、配置settings.py中LOGGING

增加下面绿色部分内容配置。

  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False,
  4. 'formatters': {
  5. 'standard': {
  6. 'format': '%(levelname)s %(asctime)s %(message)s'
  7. },
  8. },
  9. 'filters': {
  10. 'require_debug_false': {
  11. '()': 'django.utils.log.RequireDebugFalse'
  12. },
  13. },
  14. 'handlers': {
  15. 'mail_admins': {
  16. 'level': 'ERROR',
  17. 'filters': ['require_debug_false'],
  18. 'class': 'django.utils.log.AdminEmailHandler'
  19. },
  20. 'test1_handler':{
  21. 'level':'DEBUG',
  22. 'class':'logging.handlers.RotatingFileHandler',
  23. 'filename':'/yl/smartcloud/smartcloud/lxytest.log',
  24. 'formatter':'standard',
  25. },
  26. },
  27. 'loggers': {
  28. 'django.request': {
  29. 'handlers': ['mail_admins'],
  30. 'level': 'ERROR',
  31. 'propagate': True,
  32. },
  33. 'test1':{
  34. 'handlers':['test1_handler'],
  35. 'level':'INFO',
  36. 'propagate':False
  37. },
  38. }
  39. }

配置中level,filename之类的可自定义,需要几个文件就配置几个handler和logger。

2、使用

  • 导入logging
  • 如果在用到log的view.py中,想使用test1这个日志,就写:
    • log=logging.getLogger('test1')
    • log.error()
  • 在日志内容中传递变量,log.error("Get html error, %s" % (e))
  1. #!/usr/bin/python
  2. #-*- coding: UTF-8 -*-
  3.  
  4. import logging
  5. from django.http import HttpResponseRedirect,HttpResponse, Http404
  6. from django.shortcuts import render_to_response, get_object_or_404
  7. from django.template import RequestContext
  8.  
  9. log=logging.getLogger('test1')
  10.  
  11. def getHtml(request,arg):
  12. try:
  13. url=request.path
  14. url=url[1:]
  15. return render_to_response(url,RequestContext(request))
  16. except Exception,e:
  17. #log.error("Get html error, %s" % (e))
  18. log.error("日志内容")
  19. raise Http404

使用变量后的log如下:

三、封装django logging模块

django自带的logging模块也是可以用的,如果要求更高,希望加一些自定义的颜色,格式等,可进行下面操作。

1、将log封装成一个单独的app

  1. [root@yl-web-test log]# django-admin.py startapp log
  2. [root@yl-web-test log]# ls
  3. __init__.py models.py tests.py views.py

2、创建一个log.py,内容如下

  1. #!/usr/bin/python
  2.  
  3. import os
  4. import sys
  5. import time
  6. sys.path.append("..")
  7. import conf
  8. import logging
  9. import logging.handlers
  10.  
  11. try:
  12. import curses
  13. curses.setupterm()
  14. except:
  15. curses = None
  16.  
  17. default_logfile = getattr(conf,'SMARTCLOUD_LOGFILE')class Singleton(type):
  18. """Singleton Metaclass"""
  19. def __init__(cls,name,bases,dic):
  20. super(Singleton,cls).__init__(name,bases,dic)
  21. cls.instance = None
  22. def __call__(cls, *args, **kwargs):
  23. if cls.instance is None:
  24. cls.instance = super(Singleton,cls).__call__(*args,**kwargs)
  25. return cls.instance
  26.  
  27. class MessageFormatter(logging.Formatter):
  28. def __init__(self,color,*args,**kwargs):
  29. logging.Formatter.__init__(self,*args,**kwargs)
  30. self._color=color
  31. if color and curses:
  32. fg_color = unicode(curses.tigetstr("setaf") or\
  33. curses.tigetstr("setf") or "", "ascii")
  34.  
  35. self._colors={
  36. logging.DEBUG: unicode(curses.tparm(fg_color,2),"ascii"),
  37. logging.INFO: unicode(curses.tparm(fg_color,6),"ascii"),
  38. logging.WARNING: unicode(curses.tparm(fg_color, 3), "ascii"),
  39. logging.ERROR: unicode(curses.tparm(fg_color, 5), "ascii"),
  40. logging.FATAL: unicode(curses.tparm(fg_color, 1), "ascii"),
  41. }
  42. self._normal = unicode(curses.tigetstr("sgr0"), "ascii")
  43.  
  44. def format(self,record):
  45. try:
  46. record.message = record.getMessage()
  47. except Exception, e:
  48. record.message = "Bad message (%r): %r" % (e, record.__dict__)
  49. record.asctime = time.strftime("%Y/%m/%d %H:%M:%S",\
  50. self.converter(record.created))
  51. prefix = '[%(levelname)-8s %(asctime)s] ' % record.__dict__
  52. if self._color and curses:
  53. prefix = (self._colors.get(record.levelno, self._normal) +\
  54. prefix + self._normal)
  55. formatted = prefix + record.message
  56. if record.exc_info:
  57. if not record.exc_text:
  58. record.exc_text = self.formatException(record.exc_info)
  59. if record.exc_text:
  60. formatted = formatted.rstrip() + "\n" + record.exc_text
  61. return formatted.replace("\n", "\n ")
  62.  
  63. class MessageLog(object):
  64. __metaclass__ = Singleton
  65.  
  66. def __init__(self, logfile=default_logfile,):
  67. self._LEVE = {1:logging.INFO, 2:logging.WARNING, 3:logging.ERROR,\
  68. 4:logging.DEBUG, 5:logging.FATAL}
  69. self.loger = logging.getLogger()
  70. self._logfile = logfile
  71. self.init()
  72.  
  73. def init(self):
  74. if not os.path.exists(self._logfile):
  75. os.mknod(self._logfile)
  76. handler = logging.handlers.RotatingFileHandler(self._logfile)
  77. handler.setFormatter(MessageFormatter(color=True))
  78. self._handler = handler
  79. self.loger.addHandler(handler)
  80.  
  81. def INFO(self,msg,leve=1):
  82. self.loger.setLevel(self._LEVE[leve])
  83. self.loger.info(msg)
  84.  
  85. def WARNING(self, msg, leve=2):
  86. self.loger.setLevel(self._LEVE[leve])
  87. self.loger.warning(msg)
  88.  
  89. def ERROR(self, msg, leve=3):
  90. self.loger.setLevel(self._LEVE[leve])
  91. self.loger.error(msg)
  92.  
  93. def DEBUG(self, msg, leve=4):
  94. self.loger.setLevel(self._LEVE[leve])
  95. self.loger.debug(msg)
  96.  
  97. def FATAL(self, msg, leve=5):
  98. self.loger.setLevel(self._LEVE[leve])
  99. self.loger.fatal(msg)

conf.py是一个配置文件,在log app同目录,里面配置了log文件目录。

  1. import os
  2.  
  3. SMARTCLOUD_LOGFILE='/yl/smartcloud/log/smartcloud.log'

3、测试

在log.py结果加上一段测试代码如下:

  1. if __name__ == "__main__":
  2. LOG = MessageLog()
  3. str1 = "aaaaaaaa"
  4. str2 = "bbbbbbbbbb"
  5. LOG.INFO("#%s###################################"
  6. "@@@@%s@@@@@@@@@@@" %(str1,str2))
  7. LOG.WARNING("####################################")
  8. LOG.ERROR("####################################")
  9. LOG.DEBUG("####################################")
  10. LOG.FATAL("####################################")

测试结果如下:

4、在view中使用

  1. usage e.g:
  2.  
  3. from log import MessageLog
  4. LOG = MessageLog('your log file by full path')
  5. or LOG = MessageLog()
  6. default logfile name is '/yl/smartcloud/log/smartcloud.log'
  7.  
  8. LOG.INFO('some message')
  9. LOG.WARNING('some message')
  10. LOG.ERROR('some message')
  11. LOG.DEBUG('some message')
  12. LOG.FATAL('some message')

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4702026.html有问题欢迎与我讨论,共同进步。

django1.4日志模块配置及使用的更多相关文章

  1. logging日志模块配置

    logging日志模块 日志级别 日志一共分成5个等级,从低到高分别是: 1)DEBUG 2)INFO 3)WARNING 4)ERROR 5)CRITICAL 说明: DEBUG:详细的信息,通常只 ...

  2. python日志模块配置

    import logging logging.basicConfig(filename= 'out.log',filemode= 'w+', level= logging.DEBUG, format= ...

  3. python日志模块

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...

  4. Python日志模块logging用法

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  5. Yii2.0简单隐藏index.php文件和模块配置和layout布局配置禁用和日志写入配置

    隐藏index.php文件 目的:想去掉浏览器地址栏中的 index.php?r= 这一块. 在/config/web.php中   ’components'=>[]   中添加如下代码: 'u ...

  6. logging日志模块、配置字典

    logging日志模块 知识点很多 但是需要掌握的很少(会用即可) import logging # 日志有五个等级(从上往下重要程度不一样) # logging.debug('debug级别') # ...

  7. logging日志模块详细,日志模块的配置字典,第三方模块的下载与使用

    logging日志模块详细 简介 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么 了,但是当我需要看大量的地方或者在一个文件中查看的时 ...

  8. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  9. 搭建一套自己实用的.net架构(2)【日志模块-log4net】

    先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...

随机推荐

  1. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

  2. DevExpress 13.1.8全面支持VS2013

    界面套包DevExpress 13.1.8重磅来袭.从这个版本开始所有.NET控件均正式支持VS2013,当然还有很多其他更新,下面是部分更新内容: DevExpress所有.NET控件: 正式支持V ...

  3. UIView中的坐标转换

    在使用 UITableViewCell 的frame属性获取origin得到的坐标是不变的. 也就是说如果UITableView初始化完毕后,每个cell的坐标是固定的,x不变,y 随index递增的 ...

  4. 【代码笔记】iOS-手机号验证

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  5. 【代码笔记】iOS-截屏功能

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  6. 多线程(pthread、NSThread、GCD)

    pthread C语言编写 跨平台可移植 线程生命周期需要我们来管理 使用困难 NSThread 面向对象的 可直接操作线程对象 线程生命周期需要我们来管理 使用简单 资源互斥(@synchroniz ...

  7. Oracle与MySQL的区别

    1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...

  8. android Gui系统之SurfaceFlinger(5)---Vsync(2)

    9.Vsync第二部分 在上一篇中我们讲到,视图的刷新需要很多步骤, void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); preC ...

  9. #研发解决方案介绍#Recsys-Evaluate(推荐评测)

    郑昀 基于刘金鑫文档 最后更新于2014/12/1 关键词:recsys.推荐评测.Evaluation of Recommender System.piwik.flume.kafka.storm.r ...

  10. Harrypotter

    #include<iostream> using namespace std; int main() { ]={}; int a,b,c,d; cout<<"请输入总 ...