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的ORM中Pony用法
Feb 09 Python
Python操作json的方法实例分析
Dec 06 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
python3.6数独问题的解决
Jan 21 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python实现从wind导入数据
Dec 03 Python
python实现梯度法 python最速下降法
Mar 24 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
python的launcher用法知识点总结
Aug 07 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
分享一个python的aes加密代码
Dec 22 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php连接mysql数据库代码
2009/03/10 PHP
php-fpm中max_children的配置
2019/03/15 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
node.js中watch机制详解
2014/11/17 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
Python命名空间详解
2014/08/18 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
python中dir函数用法分析
2015/04/17 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
市场营销方案范文
2014/03/11 职场文书
小小商店教学反思
2014/04/27 职场文书
3分钟演讲稿
2014/04/30 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
教师节学生演讲稿
2014/09/03 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
谢师宴答谢词
2015/01/05 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
JS代码编译器Monaco使用方法
2021/06/11 Javascript
使用python创建股票的时间序列可视化分析
2022/03/03 Python