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中的多重继承实例讲解
Sep 28 Python
Python字符串格式化的方法(两种)
Sep 19 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
Python线程之定位与销毁的实现
Feb 17 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Python如何使用字符打印照片
Jan 03 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 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 输出简单动态WAP页面
2009/06/09 PHP
ThinkPHP php 框架学习笔记
2009/10/30 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
Angular简单验证功能示例
2017/12/22 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
你真的了解Python的random模块吗?
2017/12/12 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python 二维数组90度旋转的方法
2019/01/28 Python
django API 中接口的互相调用实例
2020/04/01 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
linux面试相关问题
2013/04/28 面试题
自主招生自荐信格式
2013/12/03 职场文书
聘任合同书
2015/09/21 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
html5实现点击弹出图片功能
2021/07/16 HTML / CSS