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 json encode datetime类型
Dec 28 Python
python实现超简单端口转发的方法
Mar 13 Python
Python字典操作简明总结
Apr 13 Python
Python代码调试的几种方法总结
Apr 15 Python
python访问系统环境变量的方法
Apr 29 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
对python读取CT医学图像的实例详解
Jan 24 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
python pyhs2 的安装操作
Apr 07 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
php上传文件常见问题总结
2015/02/03 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
创建简单的node服务器实例(分享)
2017/06/23 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python监控文件并且发送告警邮件
2018/06/21 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
《我为你骄傲》教学反思
2014/02/20 职场文书
班班通校本培训方案
2014/03/12 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
人事主管岗位职责
2015/02/04 职场文书
公司年会主持词范文!
2019/05/07 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript