码迷,mamicode.com
首页 > 其他好文 > 详细

django 1.8 日志配置

时间:2016-04-08 00:53:43      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

django 1.8 日志配置

以下为setings配置logging代码片段

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

LOGDIR = os.path.join(BASE_DIR, "logs")
LOGFILE = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
if not os.path.exists(LOGDIR):
    os.makedirs(LOGDIR)  # 创建路径
if os.path.isfile(os.path.join(LOGDIR, LOGFILE)):  # 重启的时候删除原始文件
    os.remove(os.path.join(LOGDIR, LOGFILE))

LOGGING = {
    version: 1,
    disable_existing_loggers: True,
    formatters: {
        standard: {
            format: %(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s
        },
    },
    filters: {
    },
    handlers: {
        mail_admins: {
            level: ERROR,
            class: django.utils.log.AdminEmailHandler,
            include_html: True,
        },
        default: {
            level:DEBUG,
            class:logging.handlers.RotatingFileHandler,
            filename: os.path.join(LOGDIR, LOGFILE),  # 或者直接写路径:‘c:\logs\all.log‘,
            mode: w+,
            maxBytes: 1024*1024*5,  # 5 MB
            backupCount: 5,
            formatter:standard,
        },
        console:{
            level: DEBUG,
            class: logging.StreamHandler,
            formatter: standard
        },
        request_handler: {
            level:DEBUG,
            class:logging.handlers.RotatingFileHandler,
            filename: os.path.join(LOGDIR, request_handler.log), #或者直接写路径:‘filename‘:‘c:\logs\request.log‘‘
            maxBytes: 1024*1024*5,  # 5 MB
            backupCount: 5,
            formatter:standard,
        },
        scripts_handler: {
            level:DEBUG,
            class:logging.handlers.RotatingFileHandler,
            filename: os.path.join(LOGDIR, script.log),  # 或者直接写路径:‘filename‘:‘c:\logs\script.log‘
            maxBytes: 1024*1024*5,  # 5 MB
            backupCount: 5,
            formatter:standard,
        },
    },
    loggers: {
        django: {
            handlers: [default, console],
            level: DEBUG,
            propagate: False
        },
        django.request: {
            handlers: [request_handler],
            level: DEBUG,
            propagate: False
        },
        scripts: {   # 脚本专用日志
            handlers: [scripts_handler],
            level: INFO,
            propagate: False
        },
        app_name: {
            handlers: [default],
            level: INFO,
        }
    }
}

 

下面专门讲解一下: 其实这个配置与python 传统的logging 很类似.
formatters 用来配置 日志打印的格式
handlers ,用来定义具体处理日志的方式,可以定义很多种,"default" 就是默认方式,"console" 就是打印到控制台方式.
loggers 是用来配置用哪几种 handlers 来处理日志,比如你同时需要输出日志到文件,和到控制台,那就必须配置 两种handlers. 在上面的例子中 ‘app_name" 是典型的例子.
有一点必须注意的是 loggers 类型 为"django" 这将处理所有类型的日志.
另外 为什么我配置了一个 ‘app_name‘ 的logger,这是因为 django 会根据包的层次结构去找 应该用那个 logger 来处理日志,如果找不到,就不输出日志,而我的项目要输出日志的views.py 都是是放在 app_name 下面的。而且当系统查找是否配置有相应的logger的时候,如果本身这个module 没有logger ,就查找父类是否有logger。比如有一个module:app_name.views. 如果在这里面用如下方式写日志:
# vi views.py
import logging
logger = logging.getLogger(‘app_name‘)
logger.info(‘my app‘)
logger.error(‘error‘)
这个时候也会找到 app_name 去处理,虽然没有定义 "app_name.views" 这样的logger,它会再他的父类找。

知道了原理,在view中就如同上面介绍的那样,应用就好了
# vi views.py
import logging
logger = logging.getLogger(__name__) # 这里用__name__通用,自动检测.
logger.info(‘my app‘)
logger.error(‘error‘)

你如果既想看 自己在程序中输出的日志,又想看django自己输出的日志,特别是sql 语句,那么根据上面介绍的,你可以这样做:
#vi views.py
import logging
logger = logging.getLogger(‘django‘) # 这里用__name__通用,自动检测.
logger.info(‘my app‘)
logger.error(‘error‘)
这样,所有的日志你都能看到,包括 django.db.backends 数据库sql语句的日志

 

官网日志配置讲解:

https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-LOGGING 

https://docs.djangoproject.com/en/1.8/topics/logging/#configuring-logging

.

django 1.8 日志配置

标签:

原文地址:http://www.cnblogs.com/weiok/p/5366110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!