开发环境: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参数中可能用到的格式化信息:

  1. %(filename)s  调用日志输出函数的模块的文件名
  2. %(asctime)s    字符串形式的当前时间,有默认格式.

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

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

【Django】Django开发中的日志输出的更多相关文章

  1. odoo开发笔记 -- 后台日志输出及分析

    odoo开发笔记 -- 后台日志输出及分析 附:日志分析软件

  2. java 组件开发中的日志记录问题

    今天帮别人写封装几个url 请求,打成jar 包,可以以java接口的方式提供给外部访问. 遇到两个问题: 1. 是否把依赖的jar包也 打入 我要生成的jar包中,如果你不打入,别人直接调用接口会报 ...

  3. springboot项目中的日志输出

    #修改默认输出级别,trace < debug < info < warn < errorlogging.level.com.lagou=trace#控制台输出logging. ...

  4. iOS中 加强日志输出 开发技术总结

    对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的B ...

  5. 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传

    一.上传图片并在前端展示 为了避免前端整体刷新,我们采用ajax+iframe(兼容所有浏览器)上传,这样用户上传之后就可以立即看到图片: 上传前: 上传后: 前端部分html: <form s ...

  6. Andriod学习笔记5:通过NDK在C++中实现日志输出

    开发环境 android studio 1.5.1 实现步骤 新建android项目 项目名称为AndroidCLog,选择Empty Activity模板,其他默认即可. 下载配置ndk 在项目上右 ...

  7. docker中tomcat日志输出自定义

    一,默认tomcat日志配置文件 /data/tomcat/conf/logging.properties 1,修改tomcat/conf下的logging.properties [root@harb ...

  8. log4j日志输出使用教程

    Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...

  9. Log4j中配置日志文件相对路径

    方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...

随机推荐

  1. echart与Accelerometer综合

    首先是x,y,z轴的加速度统计,利用四个数组记录,并长度为偶数时生成图表 var x=[]; var y=[]; var z=[]; var t=[]; document.addEventListen ...

  2. 同源策略与CORS跨域请求

    一.同源策略 1.简介 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源 ...

  3. python_魔法方法(二):算术运算

    python2.2之后,对类和类型做了同意,将int().float().str().list().touple()这些BIF转换为工厂函数 >>> type(len) <cl ...

  4. 忘记mysql数据库密码时进行修改方法

    长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件夹( ...

  5. Spark Mllib里的分层抽样(使用map作为分层抽样的数据标记)

    不多说,直接上干货! 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计

  6. PHP中文手册1

    1.入门 关于换行 PHP 会在输出时自动删除其结束符 ?>后的一个换行.该功能主要是针对在一个页面中嵌入多段 PHP 代码或者包含了无实质性输出的 PHP 文件而设计,与此同时也造成了一些疑惑 ...

  7. Toad for Oracle针对于Oracle数据库的可视化管理工具使用

    Toad for Oracle安装包下载地址:http://pan.baidu.com/s/1mgBOLZU 在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工 ...

  8. JDK 7 API 下载

    JDK 7 API 官方下载地址: http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download ...

  9. hibernate课程 初探单表映射1-3 hibernate简介

    1 hibernate定义: Java领域一项开源的orm框架技术: hibernate对jdbc进行轻量级的封装. hibernate 作为持久层存在.就是通过对象关系映射把项目中的对象持久化到数据 ...

  10. 会话跟踪之Cookie

    一:简介 Cookie主要用来存储用户信息,追踪用户会话.web客户端访问服务端直接采用的协议是Http,Http协议是一种无状态协议,无状态表现在不能够保留用户访问状态,无法记录用户信息.每一次的请 ...