Django开发中的日志输出的方法
作者:10,相濡以沫 发布时间:2023-02-24 07:37:17
开发环境: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 文本形式的日志级别
来源:http://www.cnblogs.com/shiguangyishiyongbuhui/p/9248365.html
猜你喜欢
- <script language="JScript" Runat="Server&q
- 环境:centos7 python3.6测试网址:www.bai.com测试方式:抓取百度100次结果:aio: 10.7021474838
- 本文实例讲述了python获取当前计算机cpu数量的方法。分享给大家供大家参考。具体分析如下:这里实际上返回的是计算机的cpu核心数,比如c
- 给输入框加个动态背景图<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi
- 表单递交合法性检测-只接受数字。如下代码加入HTML的<head>区:<SCRIPT LANGUAGE=&quo
- 在MySQL的管理过程中,会遇到PC Server脱机或者重启,我需要在主机启动后再将MySQL服务启动。如果上百台或者更多的MySQL主机
- 惊叹于老外的发现 《CSS Background image on html image element?》,自己从没关注过,也没想过如此的
- 本地环境设置在这里我们介绍设置Go编程语言环境,需要在你的计算机上的准备以下两个软件,(A)文本编辑器和(B)Go编译器。文本编辑器这将用来
- 请问如何用OleDbDataAdapter来对数据库进行删除、修改和添加?OleDbDataAdapter是DataSet和数据源之间建立联
- 各位大哥: 在javascript中如何取整?比如: var
- 两个例子package main import ( "fmt" "time")func Proces
- 编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个
- 插件说明:插件根据提供的10位ISBN书号,在Amazon网站上查找该图书的详细信息。如果找到结果,则返回一个两元素的数组,其中第一个元素是
- 今天,在家试试django的model的设置,如何设置的联合主键,我经过查资料和实践,把结果记录如下:例如:class user(Model
- 主要代码如下: total = application("All
- 前几天,Opera宣布其用户已经超过1亿——桌面版和手机版均超过5000万。Opera Mini是一个很优秀的手机浏览器,对手机用户而言,O
- 背景尽管到目前为止HTML4和XHTML1仍能够很好地满足我们的要求,但是它们仍然存在不足。为了满足用户丰富的基于Web应该程序的需要,达到
- Python读取配置文件-ConfigParser二次封装直接上上代码test.conf[database]connect = mysqls
- 这是一篇关于使用JScript RuntimeObject(MSDN)调试的文章。虽然这些例子中的大多数在其他浏览器中不能运行,但在IE 5
- 今天在群(CSS森林:30247792)里讨论了border的样式写法,发现border的写法还真是灵活,做了一下总结,希望对大家有用:bo