qqqq

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
# 指定输出的格式,被handler使用。
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)-8s %(message)s'
},
'detail': {
'format': '%(asctime)s %(levelname)-8s %(pathname)s[line:%(lineno)d] %(message)s'
},
},
# 指定输出到控制台还是文件中,以及输出的方式。被logger引用。
'handlers': {
# 输出到控制台
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard',
},
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
# 存放的日志的位置
'filename': r'F:\python\myorm\log',
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 100,
'formatter': 'detail',
}, 'web_file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
# 日志的位置
'filename': r'F:\python\myorm\web\web.log',
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 100,
'formatter': 'detail',
},
'rbac_file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
# 日志的位置
'filename': r'F:\python\myorm\rbac\rbac.log',
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 100,
'formatter': 'detail',
},
}, # 指定django中的每个模块使用哪个handlers。以及日志输出的级别。
'loggers': {
'django': {
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': True,
},
# 自定义模块日志
'users': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
'propagate': True,
},
'common': {
# 使用哪一个 handlers
'handlers': ['console', 'file'],
'level': 'DEBUG',
'propagate': True,
}, # web 应用的名字
'web': {
'handlers': ['console', 'web_file'],
'level': 'INFO',
'propagate': True,
},
'rbac': {
'handlers': ['console', 'rbac_file'],
'level': 'INFO',
'propagate': True,
}, },
}

此配置分成三个部分:

  • formatters: 指定输出的格式,被handler使用。
  • handlers: 指定输出到控制台还是文件中,以及输出的方式。被logger引用。
  • loggers: 指定django中的每个模块使用哪个handlers。以及日志输出的级别。

注意:日志的输出级别是由loggers中的每个模块中level选项定义。如果没有配置,那么默认为warning级别。

然后在每个模块的views.py中,通过下面代码使用:

import logging
logger = logging.getLogger(__name__)

具体的输出部分代码为:

logger.debug("hello, world")
logger.info("hello, world")
logger.error("hello, world")

日志记录级别 Level

logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字

级别 描述
CRITICAL 50 关键错误/消息
ERROR 40 错误
WARNING 30 警告消息
INFO 20 通知消息
DEBUG 10 调试
NOTSET 0 无级别

 

记录器 Logger

记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节。

关键字参数

  • filename 将日志消息附加到指定文件名的文件
  • filemode 指定用于打开文件模式
  • format 用于生成日志消息的格式字符串
  • datefmt 用于输出日期和时间的格式字符串
  • level 设置记录器的级别
  • stream 提供打开的文件,用于把日志消息发送到文件。

日志消息格式 format

  • %(name)s 记录器的名称
  • %(levelno)s 数字形式的日志记录级别
  • %(levelname)s 日志记录级别的文本名称
  • %(filename)s 执行日志记录调用的源文件的文件名称
  • %(pathname)s 执行日志记录调用的源文件的路径名称
  • %(funcName)s 执行日志记录调用的函数名称
  • %(module)s 执行日志记录调用的模块名称
  • %(lineno)s 执行日志记录调用的行号
  • %(created)s 执行日志记录的时间
  • %(asctime)s 日期和时间
  • %(msecs)s 毫秒部分
  • %(thread)d 线程ID
  • %(threadName)s 线程名称
  • %(process)d 进程ID
  • %(message)s 记录的消息

内置处理器 handler

logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。

  • handlers.DatagramHandler(host,port):发送日志消息给位于制定host和port上的UDP服务器。
  • handlers.FileHandler(filename):将日志消息写入文件filename。
  • handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
  • handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。

由于内置处理器还有很多,如果想更深入了解。可以查看官方手册。

现在大概了解了logging的使用方法,现在可以结合前面的例子使用。



django 加日志的更多相关文章

  1. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?

    https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...

  2. python的日志模块:logging;django的日志系统;django日志输出时间修改

    Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...

  3. Django加载静态网页模板

    Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...

  4. Django多进程日志文件问题

    Django多进程日志文件问题 最近使用Django做一个项目.在部署的时候发现日志文件不能滚动(我使用的是RotatingFileHandler),只有一个日志文件. 查看Log发现一个错误消息:P ...

  5. django开发日志配置

    做django开发离不开 日志,这用于保存我门的服务器的日志信息,便于开发人员的维护. 直接上代码: 在setting.py文件里直接配置即可 LOGGING = { 'version': 1, 'd ...

  6. Django中日志管理

    在settings中设置日志的相关信息,然后再逻辑代码区就可以保存相应的信息了 #简单设置: LOGGING = { 'version': 1, 'disable_existing_loggers': ...

  7. django 自定义日志配置

    如果不想使用 python 的 dictConfig 格式来配置 logger,可以制定自己的配置架构. LOGGING_CONFIG 配置定义了用来配置 django logger 的可调用函数,默 ...

  8. DJango错误日志生成

    DJango错误日志生成 setting.py设置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': ...

  9. django加载本地html

    django加载本地html from django.shortcuts import render from django.http import HttpResponse from django. ...

随机推荐

  1. fast recovery area

    First of all, the version of my enviroment is Oracle 11.0.2.3. The fast recovery area used to be cal ...

  2. stack、queue实现

    //SGI STL以deque作为缺省情况下的stack底部结构,stack没有迭代器,不提供遍历功能 //queue的实现类似stack,也是以deque作为缺省底层结构 template < ...

  3. VM Workstation 虚拟机下如何安装VMtools

    不同版本Linux原理类似,这里以Debian为例. 1 根据提示点击Install Tools,CDROM中出现VmwareTools的安装包,在你的主文件夹下新建一个文件夹(随便叫什么都行,我新建 ...

  4. iOS屏幕适配方案-Auto Layout

    市场上的android手机五花八门.各种尺寸的屏幕让android程序员们比較头疼. 也有一些大神写了一些博客提出了自己的观点.iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己 ...

  5. Centos 7 nginx-1.12.0 配置学习(一)

    [root@bogon nginx]# vim nginx.conf #user nobody; #运行用户 worker_processes ; #启动进程,通常设置成和cpu核心数相等 #全局错误 ...

  6. LeetCode 350. Intersection of Two Arrays II (两个数组的相交之二)

    Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...

  7. 模块化开发(三)---通过node.js学习模块化开发

    由于改文章有点大,部分代码格式有点问题,编辑之后博客园莫名其妙推出,有问题可以留言沟通.   什么是Node? 它是一个在浏览器之外可以解析和执行javascript代码的运行环 境,或者说是一个运行 ...

  8. Levenberg–Marquardt algorithm

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGFubWVuZ3dlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  9. bzoj1805: [Ioi2007]Sail 船帆

    可以发现旗杆的顺序是没有用的,对于每列,它的答案是它的最大值mx*(mx+1)/2 高度由小到大排序旗杆,问题可以转化为在前h行选k个最小的值 考虑激情splay乱搞(我只会splay......) ...

  10. JavaScript Patterns 2.1 Writing Maintainable Code

    Revisiting the code after some time has passed requires: • Time to relearn and understand the proble ...