Django的日志如何配置?

Django对于日志输出的信息是很完善的,request的信息,setting配置,trackback的信息,一应俱全,足够我们调试了。但是在线上环境,如果让用户看到这些信息,是很不安全的(暴露代码)。所以在线上我们要关闭Debug,但是又不能扔掉这些调试信息,这就要用到logging模块。

logging模块其实是Python的模块,在Django开发中有很多本地化的支持。

理解Logger

首先要理解logging的工作,这里面主要有四个东西:格式器formatter,过滤器filter,处理器handler,日志实例logger。

formatter

logger ----> handler ----------------> files, emails

filter

处理流程是这样的。首先,在代码中。我们拿到的是logger实例,通过这个实例来记录信息。

# import the logging libraryimport logging

# Get an instance of a logger

logger = logging.getLogger(’django’)

def my_view(request, arg1, arg):

...

if bad_mojo:

# Log an error message

logger.error(’Something went wrong!’)

然后,名字是django的这个logger就会把信息交给相应的handler,handler把信息用formater和filter处理一下,提交log(保存到文件,数据库,或者发送邮件)。

一般来说,handler可以是send_email,error_file等负责处理的方式,在logger中可以重复使用handler。例如我们的django处理器使用了send_email, error_file 这两个处理器,request处理器使用error_file,info_file两个处理器,logger和handler可以理解成多对多的关系,嘻嘻。

配置方式

Python中可以使用多种格式配置logging,比如.conf, .ini等。

在Django中,我们是把有关logging的配置写到settings里面。相应的配置及解释如下(仅供参考)。

#管理员邮箱

ADMINS = (

(’laixintao’,’*******@163.com’),

)

#非空链接,却发生404错误,发送通知MANAGERS

SEND_BROKEN_LINK_EMAILS = True

MANAGERS = ADMINS

#Email设置

EMAIL_BACKEND = ’django.core.mail.backends.smtp.EmailBackend’

EMAIL_HOST= ’smtp.163.com’#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)

EMAIL_PORT= 25 #QQ邮箱SMTP服务端口

EMAIL_HOST_USER = ’**********@163.com’ #我的邮箱帐号

EMAIL_HOST_PASSWORD = ’**************’ #授权码

EMAIL_SUBJECT_PREFIX = ’website’ #为邮件标题的前缀,默认是’[django]’

EMAIL_USE_TLS = True #开启安全链接

DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人

#logging日志配置

LOGGING = {

’version’: 1,

’disable_existing_loggers’: True,

’formatters’: {#日志格式

’standard’: {

’format’: ’%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s’}

},

’filters’: {#过滤器

’require_debug_false’: {

’()’: ’django.utils.log.RequireDebugFalse’,

}

},

’handlers’: {#处理器

’null’: {

’level’: ’DEBUG’,

’class’: ’logging.NullHandler’,

},

’mail_admins’: {#发送邮件通知管理员

’level’: ’ERROR’,

’class’: ’django.utils.log.AdminEmailHandler’,

’filters’: [’require_debug_false’],# 仅当 DEBUG = False 时才发送邮件

’include_html’: True,

},

’debug’: {#记录到日志文件(需要创建对应的目录,否则会出错)

’level’:’DEBUG’,

’class’:’logging.handlers.RotatingFileHandler’,

’filename’: os.path.join(BASE_DIR, "log",’debug.log’),#日志输出文件

’maxBytes’:1024*1024*5,#文件大小

’backupCount’: 5,#备份份数

’formatter’:’standard’,#使用哪种formatters日志格式

},

’console’:{#输出到控制台

’level’: ’DEBUG’,

’class’: ’logging.StreamHandler’,

’formatter’: ’standard’,

},

},

’loggers’: {#logging管理器

’django’: {

’handlers’: [’console’],

’level’: ’DEBUG’,

’propagate’: False

},

’django.request’: {

’handlers’: [’debug’,’mail_admins’],

’level’: ’ERROR’,

’propagate’: True,

},

# 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件

’django.security.DisallowedHost’: {

’handlers’: [’null’],

’propagate’: False,

},

}

}

以上的配置文件中,有三个日志处理器。分别是:

1. ‘django.request’:django的request发生error会自动记录,然后使用debug将信息记录到文件,还有mail_admins将信息通过邮件发送给管理员。这里邮件的功能非常棒!并不是一个纯文本信息,而是一个html文件,和我们在浏览器看到的错误页面一模一样!要正常使用邮件功能需要像我一样配置一下上面的邮件发件人信息。我是直接去网易申请了一个邮箱。要格外注意三点:1.一定要去邮件服务商开启SMTP服务;2.不同的邮件服务商可能有一些特殊的设置,比如网易,会给你一个客户端授权码,这个才是密码,而不是网页的登录密码。3 注意服务商有没有对发信频率的限制。

2. ‘django’:使用console处理器,将信息输出。在开发的时候就可以使用这个处理器(什么?print? 太low了!)

3. 最后一个处理器见注释。

最后,不要忘了给日志的路径响应的权限。比如Apache2服务器,就需要给www-data写权限:

sudochown -R [yourname]:www-data [log]

sudochmod -R g+s [log]

来源:卡瓦邦噶!

时间: 2024-10-25 20:37:38

Django的日志如何配置?的相关文章

django中邮件、日志的配置

邮件的发送及配置 # 配置邮件 EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com EMAIL_PORT = 465 EMAIL_HOST_USER = "[email protected]" # 帐号 EMAIL_HOST_PASSWORD = "xxx" # 授权码(****) DEFAULT_FROM_EMAIL = EMAIL_HOST_USER import h

Django中日志管理

在settings中设置日志的相关信息,然后再逻辑代码区就可以保存相应的信息了 #简单设置: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console']

Django框架 之 logging配置

logging配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8

Django中的URL配置和模板

Django中的URL配置 : 实例: Python代码   urlpatterns = patterns('', # Example: # (r'^myweb/', include('myweb.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc

日志文件配置与切割

日志文件配置与切割 自定义日志格式 http { server { listen          80 default; server_name     _*; access_log      logs/default.access.log combined; location / { index index.html; root  /data0/htdocs/htdocs; } } } 其中的  access_log,就是用来配置日志路径的, log_format 指令用于设置日志格式 如果

django 的mysql数据配置

原地址:http://blog.csdn.net/gamesofsailing/article/details/21465327 在成功安装python-mysql后,开始配置django的mysql连接配置 打开django项目下的setting.py文件,将DATABASES改成下面这样 DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'mysite', 'USER':'root', 'PASSWO

实验一个修改日志文件配置调优的案例

关于oracle 联机日志文件的配置,没有多少好说的,出于对性能的影响考虑,两个规则,首先 :日志文件是否够大:其次:日志文件组数是否够多.至于文件存放的物理磁盘,由于日志文件是顺序写的,即使放到固态盘上,与普通的机械硬盘相比,优势并不多. 这里通过实验来验证由于日志文件配置的问题,对oracle系统的整体吞吐量造成的瓶颈. 第一 次测试:日志文件大小为50M,共三组.如下: 这里我们使用harmmerdb 压力测试工具来对数据库施压 e 之前预创建了20个warehouse,这里配置20个虚拟

转 Tomcat访问日志详细配置

配置http访问日志.Tomcat自带的能够记录的http访问日志已经很详细了取消下面这段的注释: <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts

Tomcat访问日志详细配置

在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/