在django中使用logging模块
来源:互联网 发布:女人做完爱很累 知乎 编辑:程序博客网 时间:2024/06/03 11:18
参考官方文档:https://docs.djangoproject.com/en/dev/topics/logging/
logging是Python 2.3起自带的标准模块,可以用来从运行状态的程序中记录日志。logging模块的功能非常强大,可以非常灵活的向各种预定或者自定的目标输出日志。而利用标准的logging模块,Django程序就可以轻松实现运行环境下的日志输出,这对于开发以及部署环境下程序运行具体情况的监控和调试都是不可或缺的,所以我在这里总结一下自己的一些经验。
Django程序使用logging输出的基本设置
输出日志到文件
import logging
logging.basicConfig( # log level:ERROR、WARN、INFO、DEBUG level = logging.DEBUG, format = '%(asctime)s %(levelname)s %(module)s.%(funcName)s Line:%(lineno)d%(message)s', #filename = 'D:\\workspace_myeclipse\\djangopro_dwz\\log.log', filename = os.path.join(HERE,'static/log/log.log').replace('\\','/'),)
按日期循环保存日志文件
import loggingfrom logging.handlers import TimedRotatingFileHandler
root = logging.getLogger()if len(root.handlers) == 0: #避免重复 level = logging.INFO filename = os.path.join(HERE,'static/log/log.log').replace('\\','/') #filename = 'D:\\workspace_myeclipse\\djangopro_dwz\\log.log' format = '%(asctime)s %(levelname)s %(module)s.%(funcName)s Line:%(lineno)d%(message)s' hdlr = TimedRotatingFileHandler(filename,"M",1,10) fmt = logging.Formatter(format) hdlr.setFormatter(fmt) root.addHandler(hdlr) root.setLevel(level)
import loggingfrom isp.models import ISPModeldef index(request): isps = ISPModel.objects.order_by('-id') paginator = Paginator(isps, 10) # 每页显示数目 page = request.POST.get('pageNum', 1) try: isps = paginator.page(page) logging.info("***********日志信息*************") test = "测试指令" logging.info("@@@@@@@@@@@@execute %s success@@@@@@@@@@@@", test) logging.info("***********loginfo*************") except (EmptyPage, InvalidPage): isps = paginator.page(paginator.num_pages) return render_to_response('isp/basepage.html', {'isps':isps,'currentPage':page, 'numPerPage':5})
使用logging模块的更多好处
用好日志功能可以对开发和调试起到很多帮助作用。使用了logging模块可以通过日志级别非常方便的控制输出,不需要增减任何程序代码,只需要在settings.py中更改logging级别一行代码就行了。所以在开发过程中,可以尽量多用logging.debug输出对调试有帮助的内容。而在生产环境下,通过日志也可以方便的分析真实运行环境下的一些问题,便于调试修改bug。
如果用在Google App Engine,不需要指定输出文件,程序输出的日志都会直接保存在App Engine运行日志中,还可以通过正则表达式来搜索以往日志。
另外,通过Django debug toolbar,可以方便的直接在调试环境下直接在每个页面上查看输出的日志,非常好用。
所以,如果你在写Django程序,就不要再用原始的print了,用好logging可以事半功倍。
下面是另外一种形式的log应用:
django如何添加logging日志模块--配置多个日志文件
我用的django的版本是1.3,听闻django可以配置日志模块,不用自己单独写,于是一阵狂搜加看官方文档解决了我的需求。
我的需求是需要配置多个日志文件,网上搜出来大部分是一个的,所以给大家一个我的例子做参考。
1.在setting.py里面配置如下:
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(levelname)s %(asctime)s %(message)s'
},
},
'filters': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'formatter':'standard',
},
'test1_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'path1',
'formatter':'standard',
},
'test2_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'path2',
'formatter':'standard',
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'test1':{
'handlers': ['test1_handler'],
'level': 'INFO',
'propagate': False
},
'test2':{
'handlers': ['test2_handler'],
'level': 'INFO',
'propagate': False
},
}
}
里面的level什么的可以自己调整,需要几个文件就配几个handler和logger,还是很方面的。用的时候怎么用呢,看下面吧。
2. 在要用log的view.py里面,如果想用test1这个日志,则
log=logging.getLogger('test1')
log.error(“日志内容”)
如果,想要在日志内容里面传递变量,怎么办
log.error(" %s : execute %s failed",变量1,变量2),比较像c的printf,还是很方便的。
- 在django中使用logging模块
- 在django中使用logging模块
- 在Django中使用Logging
- 在 Django 中使用 logging
- Django 中使用 logging 模块记录系统日志
- 在 unittest 中使用 logging 模块记录测试数据
- django 、celery 中logging的使用
- [野路数] Django中使用logging
- Python的logging模块在Django中的应用
- logging模块,还在使用print打印?
- Python中使用logging模块代替print
- 使用python中logging模块记录日志
- Python中logging模块的使用
- Python中使用logging模块代替print
- Python 中 logging 日志模块在多进程环境下的使用
- logging模块使用
- logging模块的使用
- Django 日志模块 logging 的配置
- 客户第一、团队第二、个人第三
- 作为软件工程师,你必须知道的20个常识
- SVN的标准目录结构:trunk、branches、tags
- Windows 8 之ntdll的内核函数代理层变化
- Java子类与父类的初始化,父类子类內部程序的执行顺序
- 在django中使用logging模块
- webGL+eMapzone 3d演示视频(转载)
- 3_Linux环境下面_tomcat connector的安装
- 管理实践日志---序
- java web培训_OA系统_北软教育_工作日志_6.26
- Oracle append Hint(三)
- sscanf和sprintf的作用简介(一)
- html 锚点的使用
- 判断字符串是否为IP地址,用到sscanf和sprintf