Django日志
Django日志
简单的Django日志
在settings里配置,会在屏幕输出日志

- LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'handlers': {
- 'console':{
- 'level':'DEBUG',
- 'class':'logging.StreamHandler',
- },
- },
- 'loggers': {
- 'django.db.backends': {
- 'handlers': ['console'],
- 'propagate': True,
- 'level':'DEBUG',
- },
- }
- }

实际项目中的日志
settings里配置

- # 定义一下log文件存放的位置
- BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
- # Django项目日志配置
- LOGGING = {
- # 固定搭配的一个版本号
- 'version': 1,
- # 禁用已经存在的logger实例
- 'disable_existing_loggers': False,
- # 定义了三个日志打印或保存的格式
- 'formatters': {
- # 标准的
- 'standard': {
- 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
- '[%(levelname)s][%(message)s]'
- },
- # 简单的格式
- 'simple': {
- 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
- },
- # 收集
- 'collect': {
- 'format': '[%(asctime)s]%(message)s'
- }
- },
- # 日志的过滤条件
- 'filters': {
- # 需要debug=True
- 'require_debug_true': {
- '()': 'django.utils.log.RequireDebugTrue',
- },
- },
- # 定义几个处理日志的方法
- 'handlers': {
- # 把日志都打印到终端窗口
- 'console': {
- 'level': 'DEBUG',
- 'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
- 'class': 'logging.StreamHandler',
- 'formatter': 'simple'
- },
- # 默认
- 'default': {
- 'level': 'INFO',
- 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
- 'filename': os.path.join(BASE_LOG_DIR, "s8_info.log"), # 日志文件
- 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
- 'backupCount': 5, # 日志文件个数
- 'formatter': 'standard',
- 'encoding': 'utf-8',
- },
- # 专门记录错误日志的
- 'error': {
- 'level': 'ERROR',
- 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
- 'filename': os.path.join(BASE_LOG_DIR, "s8_err.log"), # 日志文件
- 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
- 'backupCount': 5,
- 'formatter': 'standard',
- 'encoding': 'utf-8',
- },
- 'collect': {
- 'level': 'INFO',
- 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
- 'filename': os.path.join(BASE_LOG_DIR, "s8_collect.log"),
- 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
- 'backupCount': 5,
- 'formatter': 'collect',
- 'encoding': "utf-8"
- }
- },
- # 最后处理logger实例的配置
- 'loggers': {
- # 默认的logger应用如下配置
- '': {
- 'handlers': ['default', 'console', 'error'], # 上线之后可以把'console'移除
- 'level': 'DEBUG',
- },
- # 名为 'collect'的logger还单独处理
- 'collect': {
- 'handlers': ['console', 'collect'],
- 'level': 'INFO',
- },
- 'collect.son': {
- 'handlers': ['console',],
- 'level': 'INFO',
- 'propagate': False,
- }
- },
- }

views视图函数中使用

- from django.shortcuts import render
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- import logging
- # 生成一个以当前文件名为日志实例名字的logger
- logger = logging.getLogger(__name__)
- # 自己随意起名生成logger
- collect_logger = logging.getLogger("collect")
- data = []
- for i in range(1, 302):
- tmp = {"id": i, "name": "alex-{}".format(i)}
- data.append(tmp)
- def user_list(request):
- # 去到当前请求的页码
- current_page = request.GET.get('page')
- logger.debug(current_page)
- paginator = Paginator(data, 10)
- # per_page: 每页显示条目数量
- # count: 数据总个数
- # num_pages:总页数
- # page_range:总页数的索引范围,如: (1,10),(1,200)
- # page: page对象
- try:
- users = paginator.page(current_page)
- # has_next 是否有下一页
- # next_page_number 下一页页码
- # has_previous 是否有上一页
- # previous_page_number 上一页页码
- # object_list 分页之后的数据列表
- # number 当前页
- # paginator paginator对象
- except PageNotAnInteger as e:
- logger.warning("传来的页码它不是个数字")
- logger.warning(str(e))
- # 如果请求的页码不是数字,默认返回第一页
- users = paginator.page(1)
- except EmptyPage as e:
- logger.warning("传来的页码它不正常")
- logger.warning(str(e))
- # 如果请求的页码超过了总页码,默认返回最后一页
- logger.debug("顺利走到了这一步,可以给前端页面返回数据了。。。")
- users = paginator.page(paginator.num_pages)
- # 专门用来收集一些需要特殊保存的信息
- collect_logger.info("哈哈哈哈")
- return render(request, 'user_list.html', {'user_list': users})
Django日志的更多相关文章
- Django 日志配置
Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...
- django 日志logging的配置以及处理
django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/ 本文摘自http://davidbj.blog.51cto.com ...
- django日志,django-crontab,django邮件模块
django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...
- Django日志信息路径的设置
django日志信息路径的设置, 因为我们经常在代码业务上线时候 需要进行调试,查看代码的后台运行情况,就需要设置django项目的具体的日志信息运维的路径了 LOGGING = { 'version ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- 18:django 日志系统
django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...
- 运维开发笔记整理-django日志配置
运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...
- 八.django日志配置
Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...
- Django 日志输出及打印--logging
Django使用python自带的logging作为日志打印工具. logging是线程安全的,主要分为4部分: Logger 用户使用的直接接口,将日志传递给Handler Handler 控制日志 ...
随机推荐
- android mvp设计模式
什么是MVP MVP,全称 Model-View-Presenter.要说MVP那就不得不说一说它的前辈——MVC(Model-View-Controller,模型-视图-控制器). View:对应于 ...
- redux-effect
npm install --save redux-effect 通过redux中间件的方式使async方法可以在redux中使用. 如果你使用redux-saga,应该非常容易上手redux-effe ...
- Splash 笔记
javascript rendering service a lightweight web browser can execute custom JavaScript in page context ...
- Using Fast Weights to Attend to the Recent Past
Ba, Jimmy, et al. "Using Fast Weights to Attend to the Recent Past." Advances In Neural In ...
- ABP中连接已有数据库执行Sql或存储过程
一:在EntityFramework项目中创建类如:ZSWDbContext. public class ZSWDbContext : AbpDbContext { public ZSWDbConte ...
- mfc小工具开发之定时闹钟之---多线程急线程同步
一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...
- 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)
前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...
- 2014-04-17-网易有道-研发类-笔试题&參考答案
一套卷子,共10道小题,3道编程大题 一.填空&选择 1.选择:给了一个递归求Fibonacci的代码,问算法复杂度 指数复杂度 2.选择:忘记了,应该不难 3.选择:给你52张除掉大小王的扑 ...
- 蓝桥杯 C/C++参考题目 取球概率(数学题,概率)
口袋中有5只红球,4只白球.随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂.但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计 ...
- 【ask】Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
1.周五对nodejs tcp长连接服务器框架进行压测,一切开始比较常规(没什么特殊问题). 2.突然手一哆嗦,把压测用的客户端群一起关闭了. 3.这个时候nodejs的服务器爆出了"Cau ...