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中functools模块函数解析
Mar 12 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
Python IDLE清空窗口的实例
Jun 25 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
python3正则提取字符串里的中文实例
Jan 31 Python
pycharm创建一个python包方法图解
Apr 10 Python
Django工程的分层结构详解
Jul 18 Python
Python turtle绘画象棋棋盘
Aug 21 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
Python-openCV读RGB通道图实例
Jan 17 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
pandas 操作 Excel操作总结
Mar 31 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
正则表达式语法
2006/10/09 Javascript
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
JS实现图片切换特效
2019/12/23 Javascript
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Python网络编程详解
2017/10/31 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
携程英文网站:Trip.com
2017/02/07 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
护士自荐信
2013/10/25 职场文书
财务管理专业推荐信
2013/11/19 职场文书
语文教学随笔感言
2014/02/18 职场文书
社区交通安全实施方案
2014/03/22 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
护士个人年终总结
2015/02/13 职场文书
初中语文教学研修日志
2015/11/13 职场文书
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript