Django logging模块
一、Django logging配置
1、在setting.py中配置

# 日志文件存放路径
BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
# Logging配置
LOGGING = {
'version': 1, # 保留字
'disable_existing_loggers': False, # 是否禁用Django框架开发的时候已经存在的Logger实例
'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': '%(message)s'
}
},
'filters': { # 过滤器
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': { # 处理器
'console': { # 定义一个在终端输出的处理器
'level': 'DEBUG', # 日志级别
'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
'class': 'logging.StreamHandler', # 日志流
'formatter': 'simple' # 用简单格式打印日志
},
'SF': { # 定义一个名为SF的日志处理器(名字自己定义即可)
'level': 'INFO', # 日志级别
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,根据文件大小自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 3, # 备份数为3 xx.log --> xx.log.1 --> xx.log.2 --> xx.log.3
'formatter': 'standard', # 用标准格式打印日志
'encoding': 'utf-8',
},
'TF': { # 定义一个名为TF的日志处理器(名字自己定义即可)
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,根据时间自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
'backupCount': 3, # 备份数为3 xx.log --> xx.log.2018-08-23_00-00-00 --> xx.log.2018-08-24_00-00-00 --> ...
'when': 'D', # 每天一切, 可选值有S/秒 M/分 H/小时 D/天 W0-W6/周(0=周一) midnight/如果没指定时间就默认在午夜
'formatter': 'standard',
'encoding': 'utf-8',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 50M
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
'collect': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'collect',
'encoding': "utf-8"
}
},
'loggers': {
'': { # 日志实例对象默认配置
'handlers': ['SF', 'console', 'error'], # 使用哪几种处理器,上线之后可以把'console'移除
'level': 'DEBUG', # 实例的级别
'propagate': True, # 是否向上传递日志流
},
'collect': { # 名为 'collect'的logger对象实例还单独处理
'handlers': ['console', 'collect'],
'level': 'INFO',
}
},
}

二、使用示例
1、在views.py视图函数中使用

import logging # 生成一个以当前模块名为名字的Logger实例,info以上的级别存到xx_info.log
logger = logging.getLogger(__name__)
# 生成一个名为collect的Logger实例,info以上的级别存到xx_collect.log
collect_logger = logging.getLogger('collect') def permission_update(request):
all_user = UserInfo.objects.all()
all_role = Role.objects.all()
all_menu = Menu.objects.all()
user_id = request.GET.get('user_id', None)
user_obj = UserInfo.objects.filter(pk=user_id).first()
role_id = request.GET.get('role_id', None)
role_obj = Role.objects.filter(id=role_id).first()
if request.method == 'POST':
post_type = request.POST.get('post_type', None)
logger.debug('获取到了post_type:{}'.format(post_type)) # debug日志
if user_id and post_type == 'role':
role_id_list = request.POST.getlist('role_id')
user_obj.roles.set(role_id_list)
logger.info('用户:{}跟新了{}的角色'.format(request.user.username, user_obj.username)) # 默认实例的info日志 if role_id and post_type == 'permission':
permission_id_list = request.POST.getlist('permission_id')
role_obj.permissions.set(permission_id_list)
collect_logger.info('{}跟新了{}的权限'.format(request.user.username, role_obj.title)) # collect实例的info日志 return render(
request,
'rbac/permission_update.html',
{
'all_user': all_user,
'all_role': all_role,
'all_menu': all_menu,
'user_obj': user_obj,
'role_obj': role_obj,
}
)

Django logging模块的更多相关文章
- 在Django中使用logging模块
一.Django logging配置 1.在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, "log" ...
- django日志,django-crontab,django邮件模块
django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...
- ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用
一.ModelViewSet 路由 因为我们正在使用ViewSet代替View,实际上已经不再需要自己来设计URL的配置了.将资源和视图.URL绑定到一起是一个可以自动完成的过程,只需要使用Route ...
- 十二 logging模块
一 日志级别 CRITICAL = 50 #FATAL = CRITICAL ERROR = 40 WARNING = 30 #WARN = WARNING INFO = 20 DEBUG = 10 ...
- python 全栈开发,Day96(Django REST framework 视图,django logging配置,django-debug-toolbar使用指南)
昨日内容回顾 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFie ...
- Django logging的介绍
Django用的是Python buildin的logging模块. Python logging由四部分组成: Loggers - 记录器 Handles - 处理器 Filters - 过滤器 F ...
- python3-开发进阶Django-debug-toolbar的配置和Django logging的配置
阅读目录 django-debug-toolbar的配置 Django logging的配置 一.django-debug-toolbar的配置 1.介绍 django-debug-toolbar 是 ...
- logging 模块使用
1. logging 1.1 什么是 logging logging 模块是 Python 内置的日志管理模块,不需要额外安装. 使用: import logging logging.critical ...
- logging模块的作用以及应用场景
一.python中的logging模块 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块,由标准库模块提供日志记录AP ...
随机推荐
- Java范型之T extends Comparable<? super T>
在观察Java源码的时候,发现了这么一个写法T extends Comparable<? super T>.不禁纳闷为什么要这么写呢?有什么好处吗,extends和super在这里的作用着 ...
- 关于Unity的坐标系
1.坐标系分为左手坐标系和右手坐标系 2.用手从X轴旋到Y轴画一个弧,如果大拇指所指的方向是Z轴,那么这个坐标系就是这只手的坐标系 3.Unity是左手坐标系,OpenGl是右手坐标系 Unity坐标 ...
- CI -- $this->load->library()详解
我第一次加载失败,原来是文件名和类名不同的原因,先总结关于CI加载你自己的类文件注意事项: 1.第三方加载文件应放在application/libraries文件下 2.文件名和类名应该相同,并且首字 ...
- 当springMVC 容器初始化完成后执行某个方法
分类: spring java2013-06-19 16:40 8289人阅读 评论(4) 收藏 举报 在某些应用中,我们希望,当spring 容器将所有的bean都初始化完成后,做一个操作(例如:将 ...
- xdebug常用配置
;指定xdebug文件 zend_extension = "F:\tools\develop_tools\php\php_xdebug-2.2.2-5.4-vc9.dll" ;xd ...
- 编程之美 set 15 高效率地安排见面会
题目 有 n 个学生分别对 m 个见面会感兴趣, 为了满足所有学生的要求, HR 希望每个学生都能参加自己感兴趣的所有见面会 思路 1. 假设某一个同学同时对k个小组感兴趣, 那么这k个小组两两之间都 ...
- FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)问题解决及更新paromiko失败问题解决
转自:http://blog.csdn.net/qy924565830/article/details/52164256 http://blog.csdn.net/coder_xia/article/ ...
- m2014-software->Word2010发布博客文章至Cnblogs
转自:http://www.cnblogs.com/xfiver/archive/2011/12/26/2301591.html 昨夜喝醉,今天早起梳理情绪,看下如何使用word2010直接写cnbl ...
- iOS 7 SDK: 如何使用后台获取(Background Fetch)
本文转载至 http://www.cocoachina.com/applenews/devnews/2013/1114/7350.html 本文主要教你如何使用iOS 7 SDK多任务处理API--B ...
- PHP获取当前日期和时间格式化方法
使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i:s");?> 显示的格式: 年-月-日 小时:分钟:妙 相关时间 ...