python logging通过json文件配置的步骤


Posted in Python onApril 27, 2020

logconfig.json

{
 "version":1,
 "disable_existing_loggers":false,
 "formatters":{
 "simple":{
  "format":"[%(asctime)s - %(levelname)s - line(%(lineno)d) - %(filename)s]: %(message)s",
  "datefmt":"%Y-%m-%d %H:%M:%S"
 }
 },
 "handlers":{
 "console":{
  "class":"logging.StreamHandler",
  "level":"DEBUG",
  "formatter":"simple",
  "stream":"ext://sys.stdout"
 },
 "info_file_handler":{
  "class":"logging.handlers.TimedRotatingFileHandler",
  "level":"INFO",
  "formatter":"simple",
  "filename":"../log/info.log",
  "when":"H",
  "interval":1,
  "backupCount":50,
  "encoding":"utf8"
 },
 "error_file_handler":{
  "class":"logging.handlers.TimedRotatingFileHandler",
  "level":"ERROR",
  "formatter":"simple",
  "filename":"../log/errors.log",
  "when":"H",
  "interval":1,
  "backupCount":50,
  "encoding":"utf8"
 }
 },
 "loggers":{
 "my_module":{
  "level":"ERROR",
  "handlers":["info_file_handler"],
  "propagate":"no"
 }
 },
 "root":{
 "level":"INFO",
 "handlers":["console","info_file_handler","error_file_handler"]
 }
}

log_utility.py

import os
import json
import logging
import logging.config


def setup_logging(default_path="logconfig.json",default_level=logging.DEBUG):
 path = default_path
 if os.path.exists(path):
 with open(path,"r") as f:
  config = json.load(f)
  logging.config.dictConfig(config)
 else:
 logging.basicConfig(level=default_level)

调用

config_path = sys.path[0] + '/logconfig.json'
log_utility.setup_logging(config_path)

补充知识:python logging定制logstash的json日志格式

最近一直在折腾日志的收集,现在算是收尾了。 写一篇算python优化logstash的方案。

其实大家都知道logstash调用grok来解析日志的话,是要消耗cpu的成本的,毕竟是需要正则的匹配的。

根据logstash调优的方案,咱们可以预先生成json的格式。 我这边基本是python的程序,怎么搞尼 ?

有两种方法,第一种方法是生成json后,直接打入logstash的端口。 还有一种是生成json写入文件,让logstash做tail操作的时候,把一行的日志数据直接载入json就可以了。

python下的日志调试用得时logging,改成json也是很好改得。 另外不少老外已经考虑到这样的需求,已经做了python logstash的模块。

import logging
import logstash
import sys

host = 'localhost'

test_logger = logging.getLogger('python-logstash-logger')
test_logger.setLevel(logging.INFO)
test_logger.addHandler(logstash.LogstashHandler(host, 5959, version=1))
# test_logger.addHandler(logstash.TCPLogstashHandler(host, 5959, version=1))

test_logger.error('python-logstash: test logstash error message.')
test_logger.info('python-logstash: test logstash info message.')
test_logger.warning('python-logstash: test logstash warning message.')

# add extra field to logstash message
extra = {
 'test_string': 'python version: ' + repr(sys.version_info),
 'test_boolean': True,
 'test_dict': {'a': 1, 'b': 'c'},
 'test_float': 1.23,
 'test_integer': 123,
 'test_list': [1, 2, '3'],
}

test_logger.info('python-logstash: test extra fields', extra=extra)

python-logstash自带了amqp的方案

import logging
import logstash

# AMQP parameters
host = 'localhost'
username = 'guest'
password= 'guest'
exchange = 'logstash.py'

# get a logger and set logging level
test_logger = logging.getLogger('python-logstash-logger')
test_logger.setLevel(logging.INFO)

# add the handler
test_logger.addHandler(logstash.AMQPLogstashHandler(version=1,
       host=host,
       durable=True,
       username=username,
       password=password,
       exchange=exchange))

# log
test_logger.error('python-logstash: test logstash error message.')
test_logger.info('python-logstash: test logstash info message.')
test_logger.warning('python-logstash: test logstash warning message.')

try:
 1/0
except:
 test_logger.exception('python-logstash: test logstash exception with stack trace')

不管怎么说,最后生成的格式是这样就可以了。

{
 "@source"=>"unknown",
 "@type"=>"nginx",
 "@tags"=>[],
 "@fields"=>{
 "remote_addr"=>"192.168.0.1",
 "remote_user"=>"-",
 "body_bytes_sent"=>"13988",
 "request_time"=>"0.122",
 "status"=>"200",
 "request"=>"GET /some/url HTTP/1.1",
 "request_method"=>"GET",
 "http_referrer"=>"http://www.example.org/some/url",
 "http_user_agent"=>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1"
 },
 "@timestamp"=>"2012-08-23T10:49:14+02:00"
}

我这里简单提一下,这个模块用的不是很满意,我在python下把日志打成了json字符串,我原本以为会像grok那样,在Es里面,我的这条日志是个字段的结构,而不是这个日志都在message里面…. 我想大家应该明白了我的意思,这样很是不容易在kibana的搜索…

在kibana搜索,我经常上 source:xxx AND level:INFO 结果正像上面描述的那样,整条日志,都在@message里面。

以上这篇python logging通过json文件配置的步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python栈类实例分析
Jun 15 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
用Pygal绘制直方图代码示例
Dec 07 Python
python中列表和元组的区别
Dec 18 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
Python根据服务获取端口号的方法
Sep 25 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python制作动态字符画的源码
Aug 04 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 #Python
Python判断字符串是否为空和null方法实例
Apr 26 #Python
You might like
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
PHP时间函数使用详解
2019/03/21 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
会计电算化大学生职业规划书
2014/02/05 职场文书
毕业留言寄语大全
2014/04/10 职场文书
公司经理任命书
2014/06/05 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
房地产端午节活动方案
2014/08/24 职场文书
代领报检证委托书范本
2014/10/11 职场文书
公司会议开幕词
2015/01/29 职场文书
门店店长岗位职责
2015/04/14 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js