django1.4日志模块配置及使用

一、默认日志配置

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

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘filters‘: {
        ‘require_debug_false‘: {
            ‘()‘: ‘django.utils.log.RequireDebugFalse‘
        }
    },
    ‘handlers‘: {
        ‘mail_admins‘: {
            ‘level‘: ‘ERROR‘,
            ‘filters‘: [‘require_debug_false‘],
            ‘class‘: ‘django.utils.log.AdminEmailHandler‘
        }
    },
    ‘loggers‘: {
        ‘django.request‘: {
            ‘handlers‘: [‘mail_admins‘],
            ‘level‘: ‘ERROR‘,
            ‘propagate‘: True,
        },
    }
}

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

默认没有定义formatters。

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

二、简单例子

1、配置settings.py中LOGGING

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

LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘formatters‘: {
        ‘standard‘: {
            ‘format‘: ‘%(levelname)s %(asctime)s %(message)s‘
        },
    },
    ‘filters‘: {
        ‘require_debug_false‘: {
            ‘()‘: ‘django.utils.log.RequireDebugFalse‘
        },
    },
    ‘handlers‘: {
        ‘mail_admins‘: {
            ‘level‘: ‘ERROR‘,
            ‘filters‘: [‘require_debug_false‘],
            ‘class‘: ‘django.utils.log.AdminEmailHandler‘
        },
        ‘test1_handler‘:{
            ‘level‘:‘DEBUG‘,
            ‘class‘:‘logging.handlers.RotatingFileHandler‘,
            ‘filename‘:‘/yl/smartcloud/smartcloud/lxytest.log‘,
            ‘formatter‘:‘standard‘,
        },
    },
    ‘loggers‘: {
        ‘django.request‘: {
            ‘handlers‘: [‘mail_admins‘],
            ‘level‘: ‘ERROR‘,
            ‘propagate‘: True,
        },
        ‘test1‘:{
            ‘handlers‘:[‘test1_handler‘],
            ‘level‘:‘INFO‘,
            ‘propagate‘:False
        },
    }
}

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

2、使用

  • 导入logging
  • 如果在用到log的view.py中,想使用test1这个日志,就写:
    • log=logging.getLogger(‘test1‘)
    • log.error()
  • 在日志内容中传递变量,log.error("Get html error, %s" % (e))
#!/usr/bin/python
#-*- coding: UTF-8 -*-

import logging
from django.http import HttpResponseRedirect,HttpResponse, Http404
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext

log=logging.getLogger(‘test1‘)

def getHtml(request,arg):
    try:
        url=request.path
        url=url[1:]
        return render_to_response(url,RequestContext(request))
    except Exception,e:
        #log.error("Get html error, %s" % (e))
        log.error("日志内容")
        raise Http404

使用变量后的log如下:

三、封装django logging模块

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

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

[[email protected] log]# django-admin.py startapp log
[[email protected] log]# ls
__init__.py  models.py  tests.py  views.py

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

#!/usr/bin/python

import os
import sys
import time
sys.path.append("..")
import conf
import logging
import logging.handlers

try:
    import curses
    curses.setupterm()
except:
    curses = None

default_logfile = getattr(conf,‘SMARTCLOUD_LOGFILE‘)class Singleton(type):
    """Singleton Metaclass"""
    def __init__(cls,name,bases,dic):
        super(Singleton,cls).__init__(name,bases,dic)
        cls.instance = None
    def __call__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super(Singleton,cls).__call__(*args,**kwargs)
        return cls.instance

class MessageFormatter(logging.Formatter):
    def __init__(self,color,*args,**kwargs):
        logging.Formatter.__init__(self,*args,**kwargs)
        self._color=color
        if color and curses:
            fg_color = unicode(curses.tigetstr("setaf") or                                        curses.tigetstr("setf") or "", "ascii")

            self._colors={
                    logging.DEBUG: unicode(curses.tparm(fg_color,2),"ascii"),
                    logging.INFO: unicode(curses.tparm(fg_color,6),"ascii"),
                    logging.WARNING: unicode(curses.tparm(fg_color, 3), "ascii"),
                    logging.ERROR: unicode(curses.tparm(fg_color, 5), "ascii"),
                    logging.FATAL: unicode(curses.tparm(fg_color, 1), "ascii"),
                    }
            self._normal = unicode(curses.tigetstr("sgr0"), "ascii")

    def format(self,record):
        try:
            record.message = record.getMessage()
        except Exception, e:
            record.message = "Bad message (%r): %r" % (e, record.__dict__)
        record.asctime = time.strftime("%Y/%m/%d %H:%M:%S",                                                            self.converter(record.created))
        prefix = ‘[%(levelname)-8s %(asctime)s] ‘ % record.__dict__
        if self._color and curses:
            prefix = (self._colors.get(record.levelno, self._normal) +                                                                        prefix + self._normal)
        formatted = prefix + record.message
        if record.exc_info:
            if not record.exc_text:
                record.exc_text = self.formatException(record.exc_info)
        if record.exc_text:
            formatted = formatted.rstrip() + "\n" + record.exc_text
        return formatted.replace("\n", "\n    ")

class MessageLog(object):
    __metaclass__ = Singleton

    def __init__(self, logfile=default_logfile,):
        self._LEVE = {1:logging.INFO, 2:logging.WARNING, 3:logging.ERROR,                                                      4:logging.DEBUG, 5:logging.FATAL}
        self.loger = logging.getLogger()
        self._logfile = logfile
        self.init()

    def init(self):
        if not os.path.exists(self._logfile):
            os.mknod(self._logfile)
        handler = logging.handlers.RotatingFileHandler(self._logfile)
        handler.setFormatter(MessageFormatter(color=True))
        self._handler = handler
        self.loger.addHandler(handler)

    def INFO(self,msg,leve=1):
        self.loger.setLevel(self._LEVE[leve])
        self.loger.info(msg)

    def WARNING(self, msg, leve=2):
        self.loger.setLevel(self._LEVE[leve])
        self.loger.warning(msg)

    def ERROR(self, msg, leve=3):
        self.loger.setLevel(self._LEVE[leve])
        self.loger.error(msg)

    def DEBUG(self, msg, leve=4):
        self.loger.setLevel(self._LEVE[leve])
        self.loger.debug(msg)

    def FATAL(self, msg, leve=5):
        self.loger.setLevel(self._LEVE[leve])
        self.loger.fatal(msg)

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

import os

SMARTCLOUD_LOGFILE=‘/yl/smartcloud/log/smartcloud.log‘

3、测试

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

if __name__ == "__main__":
    LOG = MessageLog()
    str1 = "aaaaaaaa"
    str2 = "bbbbbbbbbb"
    LOG.INFO("#%s###################################"
                        "@@@@%[email protected]@@@@@@@@@@" %(str1,str2))
    LOG.WARNING("####################################")
    LOG.ERROR("####################################")
    LOG.DEBUG("####################################")
    LOG.FATAL("####################################")

测试结果如下:

4、在view中使用

usage e.g:

from log import MessageLog
LOG = MessageLog(‘your log file by full path‘)
or LOG = MessageLog()
default logfile name is ‘/yl/smartcloud/log/smartcloud.log‘

LOG.INFO(‘some message‘)
LOG.WARNING(‘some message‘)
LOG.ERROR(‘some message‘)
LOG.DEBUG(‘some message‘)
LOG.FATAL(‘some message‘)

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

时间: 2024-12-28 20:32:52

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

Python之配置日志模块logging

一.定义日志打印方式 如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息.可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义. 常见打印日志信息形式如下: import logging logging.debug("========定义要打印的内容====debug①===========") logging.info("=========定义要打印的内容====info②===========") logging.w

python中的日志模块logging

1.日志级别5个: 警告Warning 一般信息Info  调试 Debug  错误Error 致命Critical 2.禁用日志方法 logging.disable(logging.DEBUG) 3.将日志写入文件 logging.basicConfig(filename='log.txt', level=logging.CRITICAL, format=' %(asctime)s - %(levelname)s - %(message)s') 4.格式化输出日志信息 注意事项: 1.日志输出

python日志模块-logging

日志模块 logging logging模块主要可以根据自定义日志信息,在程序运行的时候将日志打印在终端及记录日志到文件中.在这先了解一下logging支持的日志五个级别 debug() 调试级别,一般用于记录程序运行的详细信息 info() 事件级别,一般用于记录程序的运行过程 warnning() 警告级别,,一般用于记录程序出现潜在错误的情形 error() 错误级别,一般用于记录程序出现错误,但不影响整体运行 critical 严重错误级别 , 出现该错误已经影响到整体运行 简单用法,将

实战Nginx(2)-日志模块

nginx有一个非常灵活的日志记录模式.每个级别的配置可以有各自独立的访问日志.日志格式通过log_format命令来定义.ngx_http_log_module是用来定义请求日志格式的. 一.日志记录配置详解 1. access_log指令 语法: access_log path [format [buffer=size [flush=time]]]; access_log path format gzip[=level] [buffer=size] [flush=time]; access_

python 全栈 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据流中接收) 1.函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error mes

IIS 7完全攻略之日志记录配置(摘自网络)

IIS 7完全攻略之日志记录配置 作者:泉之源 [IT168 专稿]除了 Windows 提供的日志记录功能外,IIS 7.0 还可以提供其他日志记录功能.例如,可以选择日志文件格式并指定要记录的请求. (一)启用或禁用日志记录 如果希望 IIS 基于配置的条件有选择地记录特定的服务器请求,就应为服务器启用日志记录.一旦启用了服务器日志记录,就可以为服务器上的任意站点启用选择性日志记录.然后,还可以查看日志文件,以了解失败和成功的请求. 如果不再希望 IIS 有选择地记录对某个站点的请求,则应为

ns3 Tutorial 中的日志模块(翻译)

转载地址:http://blog.sina.com.cn/s/blog_8ecca79b0101d7fe.html 1  日志模块的使用 在运行 first.cc 脚本时,我们已经简单了解了日志模块.现在,我们将更深入地了解日志子系统是为哪些用户案例设计的. 1.1 日志概述 很多大型系统支持某种消息记录功能,ns3 也不例外.在某些情况下,只有错误消息会被记录到操作控制台(在基于 Unix 的系统中通常是标准错误输出).在其他系统中,警告消息可能跟详细的信息消息一起被输出.在某些情况下,日志功

python 自动化之路 logging日志模块

logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511919766/article/details/25136485 清晰明了,入门必备http://my.oschina.net/leejun2005/blog/126713 继承讲的很棒http://my.oschina.net/u/126495/blog/464892 实例分析 一:概述 在实际项目

python的logging日志模块(二)

晚上比较懒,直接搬砖了. 1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印:WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为: