Django开发中的日志输出的方法


Posted in Python onJuly 02, 2018

开发环境:Ubuntu16.04+Django 1.11.9+Python2.7

一:使用自定义函数输出日志到log文件:

import time 
def print_log(log): 
   file_obj = open('/tmp/filename.log', 'a+')
   log_time = time.strftime(
    '[%Y-%m-%d %H:%M:%S]',
    time.localtime(
      time.time()))  # 转化时间格式
   file_obj.write("%s\n" % (str(log)))
   file_obj.close()    # 记得close()

这样的在需要输出的时候,调用print_log()就可以输出信息到指定的文件了.缺点是不清楚是哪个文件哪个函数输出的信息更也不知道是来自哪一行输出.

获取到函数信息

获取文件名,文件路径,所在函数名,所在行

# 第二个'#'后面为实测输出结果,Linux也测试过
import sys
import os
import time
def get_function_info():
  print(os.path.basename(sys.argv[0]).split(".")[0])   #不带后缀的所在文件名 # 关于函数
  print (os.path.basename(sys.argv[0]))  


 #带后缀的所在文件名 # 关于函数.py
  print (sys._getframe().f_code.co_filename) 


 # 函数路径 # E:/Pycharm/tcp/关于函数.py
  print (sys._getframe().f_code.co_name)  



# 所在函数名  # get_function_info
  print (sys._getframe().f_lineno)    



 # 所在行   # 23
  
get_function_info()

使用上面的方法可以获取到文件名,路径,函数名,所在行的行号

import sys
import os
import time
def get_function_info():
  file_name = os.path.basename(sys.argv[0]).split(".")[0]    
  os.path.basename(sys.argv[0]) 
  sys._getframe().f_code.co_filename 
  function_name = sys._getframe().f_code.co_name 
  function_num = sys._getframe().f_lineno  
  return file_name,function_name,function_num
  
 def print_log(log): 
   file_obj = open('/tmp/filename.log', 'a+')
   log_time = time.strftime(
    '[%Y-%m-%d %H:%M:%S]',
    time.localtime(
      time.time()))
   file_name,function_name, function_num= get_function_info()
   file_obj.write("%s %s %s [line:%s] log %s\n" % (log_time,file_name, function_name,function_num,str(log)))
   file_obj.close()

这样在理论上是能获取到想得到的信息的.

可是这些在django实际开发使用的时候,因为print_log()是单独定义的函数,在被调用的时候,输出的函数名都是manage.py,行数也是固定的,不满足实际需要的.

二:使用logging:

logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S', 
 filename='/tmp/filename.log',
filemode='a')

上面我使用的配置信息.具体参数意思如下:

  1. 第一行:日志等级
  2. 第二行:输出格式,message是接收的参数
  3. 第三行:时间格式
  4. 第四行:输出的log文档路径
  5. 第五行:表示追加

如下使用即可.

import logging
logging.debug(log)

logging.debug(log)中log表示需要输出的log信息,这样会输出所有的信息

logging的日志级别:

critical > error > warning > info > debug

所以debug能输出所有的信息,特别是开发阶段,需要所有信息.

format参数中可能用到的格式化信息:

%(filename)s调用日志输出函数的模块的文件名

%(asctime)s  字符串形式的当前时间,有默认格式.

%(lineno)d    调用日志输出函数的语句所在的代码行

%(levelname)s  文本形式的日志级别

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
对Python中gensim库word2vec的使用详解
May 08 Python
利用python循环创建多个文件的方法
Oct 25 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
python使用rsa非对称加密过程解析
Dec 28 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
pycharm全局搜索的具体步骤
Jul 28 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
python使用glob检索文件的操作
May 20 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 #Python
Django 连接sql server数据库的方法
Jun 30 #Python
python绘制直线的方法
Jun 30 #Python
Python Grid使用和布局详解
Jun 30 #Python
Python 删除连续出现的指定字符的实例
Jun 29 #Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 #Python
python去除文件中重复的行实例
Jun 29 #Python
You might like
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
Js+XML 操作
2006/09/20 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
js prototype和__proto__的关系是什么
2019/08/23 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python使用udp实现聊天器功能
2018/12/10 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python向图片里添加文字
2019/11/26 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
导游个人求职信
2014/04/25 职场文书
企业宣传策划方案
2014/05/29 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python