Python日志:自定义输出字段 json格式输出方式


Posted in Python onApril 27, 2020

最近有一个需求:将日志以json格式输出, 并且有些字段是logging模块没有的.看了很多源码和资料, 终于搞定, 抽取精华分享出来, 一起成长.

import json
import logging
 
class JsonFilter(logging.Filter):
 
 ip = 'IP'
 source = 'APP'
 
 def filter(self, record):
  record.ip = self.ip
  record.username = self.source
  return True
 
if __name__ == '__main__':
 
 formate = json.dumps({
  "time": "%(asctime)s",
  "levelname": "%(levelname)s",
  "levelno": "%(lineno)d",
  "ip": "%(ip)s",
  "source": "%(source)s"
 })
 logging.basicConfig(level=logging.DEBUG,
      format=formate)
 logger = logging.getLogger()
 filter_ = JsonFilter()
 logger.addFilter(filter_)
 
 logger.debug('A debug message')
 
 filter_.ip = '127.0.0.1'
 filter_.source= 'china'
 logger.info('A message for test')

运行结果:

Python日志:自定义输出字段 json格式输出方式

其实就是重写了logging.Filter的filter方法,自定义需要的字段, 在调用日志输出时,赋予相应的值即可.不赋予相应的值时也可以输出日志, 会自动按照定义字段时的信息输出.

补充知识:Log打印完整参数,生成Json文件

当字符数量足够多的的时候,Log控制台便会自动截取,不能在控制台上完整输出,可以利用如下方法,这种方式会在测试机或者虚拟机的根目录生成一个new.json文件,里面是完整的Log信息

public static void printStringToFile(String str) {
 File file = new File(Environment.getExternalStorageDirectory(), "new.json");
 Log.d("Lyb", "path = " + file.getAbsolutePath());
 FileWriter writer = null;
 try {
  Log.d("Lyb", "createNewFile");
  if (!file.exists()) {
   file.createNewFile();
  }else {
   file.delete();
   file.createNewFile();
  }
  writer = new FileWriter(file, true);
  writer.write(str);
  writer.flush();
  writer.close();
  writer = null;
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   if (writer != null) {
    writer.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

以上这篇Python日志:自定义输出字段 json格式输出方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python数据类型详解(一)字符串
May 08 Python
详解Python中for循环是如何工作的
Jun 30 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Python实现常见的回文字符串算法
Nov 14 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
python3.6实现学生信息管理系统
Feb 21 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 #Python
python logging通过json文件配置的步骤
Apr 27 #Python
Python垃圾回收机制三种实现方法
Apr 27 #Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 #Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 #Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 #Python
python读取yaml文件后修改写入本地实例
Apr 27 #Python
You might like
在数据量大(超过10万)的情况下
2007/01/15 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
php数组分页实现方法
2016/04/30 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
python使用cPickle模块序列化实例
2014/09/25 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
基于Python绘制个人足迹地图
2020/06/01 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
.NET面试10题
2014/02/24 面试题
如何手工释放资源
2013/12/15 面试题
中层干部岗位职责
2013/12/18 职场文书
开业典礼主持词
2014/03/21 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
用Java实现简单计算器功能
2021/07/21 Java/Android
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript