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中with及contextlib的用法详解
Jun 08 Python
详解python中的文件与目录操作
Jul 11 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
django+echart数据动态显示的例子
Aug 12 Python
Python函数的默认参数设计示例详解
Dec 01 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
Python 如何创建一个线程池
Jul 28 Python
一文详述 Python 中的 property 语法
Sep 01 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
python 实现定时任务的四种方式
Apr 01 Python
Python简易开发之制作计算器
Apr 28 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强制下载类型的实现代码
2011/04/21 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
医院实习接收函
2014/01/12 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
《灯光》教学反思
2014/02/08 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
留学推荐信英文范文
2015/03/26 职场文书
世界名著读书笔记
2015/06/25 职场文书
辞职申请书范本
2019/05/20 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL