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中的自定义函数学习笔记
Sep 23 Python
Python素数检测的方法
May 11 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
Python爬虫将爬取的图片写入world文档的方法
Nov 07 Python
python生成lmdb格式的文件实例
Nov 08 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
Python一些基本的图像操作和处理总结
Jun 23 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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
php-fpm配置详解
2014/02/12 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
python 接口返回的json字符串实例
2018/03/27 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
python中强大的format函数实例详解
2018/12/05 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
小区停车场管理制度
2014/01/27 职场文书
重阳节登山活动方案
2014/02/03 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
敬老院标语
2014/06/27 职场文书
慈善募捐倡议书
2015/04/27 职场文书
青年志愿者活动感想
2015/08/07 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
图神经网络GNN算法
2022/05/11 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js