【Django】Django开发中的日志输出
开发环境: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')
上面我使用的配置信息.具体参数意思如下:
- 第一行:日志等级
 - 第二行:输出格式,message是接收的参数
 - 第三行:时间格式
 - 第四行:输出的log文档路径
 - 第五行:表示追加
 
如下使用即可.
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 文本形式的日志级别
【Django】Django开发中的日志输出的更多相关文章
- odoo开发笔记 -- 后台日志输出及分析
		
odoo开发笔记 -- 后台日志输出及分析 附:日志分析软件
 - java 组件开发中的日志记录问题
		
今天帮别人写封装几个url 请求,打成jar 包,可以以java接口的方式提供给外部访问. 遇到两个问题: 1. 是否把依赖的jar包也 打入 我要生成的jar包中,如果你不打入,别人直接调用接口会报 ...
 - springboot项目中的日志输出
		
#修改默认输出级别,trace < debug < info < warn < errorlogging.level.com.lagou=trace#控制台输出logging. ...
 - iOS中 加强日志输出 开发技术总结
		
对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的B ...
 - 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传
		
一.上传图片并在前端展示 为了避免前端整体刷新,我们采用ajax+iframe(兼容所有浏览器)上传,这样用户上传之后就可以立即看到图片: 上传前: 上传后: 前端部分html: <form s ...
 - Andriod学习笔记5:通过NDK在C++中实现日志输出
		
开发环境 android studio 1.5.1 实现步骤 新建android项目 项目名称为AndroidCLog,选择Empty Activity模板,其他默认即可. 下载配置ndk 在项目上右 ...
 - docker中tomcat日志输出自定义
		
一,默认tomcat日志配置文件 /data/tomcat/conf/logging.properties 1,修改tomcat/conf下的logging.properties [root@harb ...
 - log4j日志输出使用教程
		
Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...
 - Log4j中配置日志文件相对路径
		
方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...
 
随机推荐
- 长春理工大学第十四届程序设计竞赛(重现赛)M.Orx Zone
			
链接:https://ac.nowcoder.com/acm/contest/912/M 题意: Daenerys Stormborn, 风暴中出生的丹尼莉丝,the Unburnt, 烧不死的,Qu ...
 - rabbitMq解析
			
import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util ...
 - jquery——事件冒泡、事件委托
			
一个事件冒泡的例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
 - Java ping 主机 端口
			
22:04:08.002 [main] INFO Ping - 目标地址 192.168.1.107 是否可到达:true 22:04:08.006 [main] INFO Ping - 执行命令 p ...
 - Hive 基本语法操练(五):Hive 的 JOIN 用法
			
Hive 的 JOIN 用法 hive只支持等连接,外连接,左半连接.hive不支持非相等的join条件(通过其他方式实现,如left outer join),因为它很难在map/reduce中实现这 ...
 - shell脚本之前的基础知识
			
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
 - jdbc操作数据库的步骤
			
package com.jckb; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
 - WebAPI创建
			
一.创建Web API 1.Create a New Web API Project创建新的Web API项目 Start by running Visual Studio 2010 and sele ...
 - UINavigationControlle 之 UINavigationBar及navigationItem关系探讨
			
在设置标题栏时常常遇到修改标题.修改返回按钮标题.增加一些按钮等需求,实现过程中一般会把UINavigationController.UINavigationBar.navigationItem及se ...
 - uvm_reg_adapter——寄存器模型(十八)
			
uvm_reg_adapter 功能就是在uvm_reg_bus_op和总线操作之间的转换.主要包含两个函数reg2bus 和bus2reg. //-------------------------- ...