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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
批处理与python代码混合编程的方法
May 19 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
基于FME使用Python过程图解
May 13 Python
python如何快速拼接字符串
Oct 28 Python
flask项目集成swagger的方法
Dec 09 Python
python中re模块知识点总结
Jan 17 Python
python如何用matplotlib创建三维图表
Jan 26 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 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
php+redis消息队列实现抢购功能
2018/02/08 PHP
Prototype Class对象学习
2009/07/19 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python采集微信公众号文章
2018/12/20 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
python文件及目录操作代码汇总
2020/07/08 Python
基于python实现删除指定文件类型
2020/07/21 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
超市业务员岗位职责
2013/12/05 职场文书
上课迟到检讨书
2014/02/19 职场文书
金融管理应届生求职信
2014/02/20 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
无犯罪记录证明
2014/09/19 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
美术教师个人工作总结
2015/02/06 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Golang二维数组的使用方式
2021/05/28 Golang