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. [Vue @Component] Place Content in Components with Vue Slots

    Vue's slots enable you to define where content of a component should land when you define the conten ...

  2. 为DataGrid 写一个 DropDownListColumn

    Net下有一个类DataGridColumn 作为 DataGrid 控件的不同列类型的基类. 有关此类型全部成员的列表.请參阅 DataGridColumn 成员. System.Object  S ...

  3. org.apache.shiro.web.servlet.ShiroHttpServletRequest cannot be cast to org.springframwork.web.mult..

    在用dwz框架+spring MVC时上传文件报的错 详细错误例如以下: 事实上就是一个类型转换错误,但却研究了好长时间,怎么都不知道哪里错了.由于前面卸过一个文件上传的和这个差点儿相同,那个就没有问 ...

  4. WEB应用与站点的差别以及未来发展推測

    WEB应用与站点的差别 确切的说应该是网络应用(Web Application)与网络网站(Website)的差别. 之所以要弄清这两个的差别,对于网页设计师以及參与到互联网行业的职业,其方发展向有非 ...

  5. poj 3020 Antenna Placement(二分无向图 匈牙利)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6438   Accepted: 3176 ...

  6. LNMP环境搭建——PHP篇

    一.源代码安装 1.编译安装 ./configure --prefix=/usr/local/php\ --with-config-file-path=/usr/local/php/etc --wit ...

  7. POJ 3221 Diamond Puzzle.

    ~~~~ 题目链接:http://poj.org/problem? id=3221 显然是BFS找最优解.但是终止条件不好写.看到有一仅仅队交上去一直TLE. 比赛完了看题解原来是以目标状态为起点,B ...

  8. YTU 2750: 猜算式

    2750: 猜算式 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 22  解决: 1 题目描述 看下面的算式: □□ x □□ = □□ x □□□ 它表示 ...

  9. poj2104 k-th number 主席树入门讲解

    poj2104 k-th number 主席树入门讲解 定义:主席树是一种可持久化的线段树 又叫函数式线段树   刚开始学是不是觉得很蒙逼啊 其实我也是 主席树说简单了 就是 保留你每一步操作完成之后 ...

  10. Bing Maps进阶系列三:使用地图图像服务(ImageryService)

    Bing Maps进阶系列三:使用地图图像服务(ImageryService) 地图图像服务(ImageryService)提供了根据地理位置(经度和纬度)坐标和地图的缩放级别解析出对应于地图图片系统 ...