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 连连看连接算法
Nov 22 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
分析python请求数据
Aug 19 Python
使用Python处理BAM的方法
Sep 28 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Python any()函数的使用方法
Oct 28 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
Django中Aggregation聚合的基本使用方法
Jul 09 Python
python绘制雷达图实例讲解
Jan 03 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
PHP脚本的10个技巧(7)
2006/10/09 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
splice slice区别
2006/10/09 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
js实现登录与注册界面
2017/11/01 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python内置函数OCT详解
2016/11/09 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python将string转换到float的实例方法
2019/07/29 Python
Python中函数的返回值示例浅析
2019/08/28 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
python如何把字符串类型list转换成list
2020/02/18 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2014年统战工作总结
2014/12/09 职场文书
2015年城管执法工作总结
2015/07/23 职场文书