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 getopt 参数处理小示例
Jun 09 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
Python中的列表知识点汇总
Apr 14 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
python PyTorch预训练示例
Feb 11 Python
python2.7安装图文教程
Mar 13 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Keras 使用 Lambda层详解
Jun 10 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php无限遍历目录示例
2014/02/21 PHP
php header函数的常用http头设置
2015/06/25 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
vue的keep-alive用法技巧
2019/08/15 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
PageFactory设计模式基于python实现
2020/04/14 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
教育科研先进个人材料
2014/01/26 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
道歉信范文
2015/05/12 职场文书
电影地道战观后感
2015/06/04 职场文书
Python基础之元编程知识总结
2021/05/23 Python