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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
详细介绍Python函数中的默认参数
Mar 30 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
Python hashlib模块加密过程解析
Nov 05 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 Python
python 单机五子棋对战游戏
Apr 28 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数据库类
2009/05/27 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php生成短域名函数
2015/03/23 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
解决Python传递中文参数的问题
2015/08/04 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
python实现三次样条插值
2018/12/17 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
HR求职自荐信范文
2014/06/21 职场文书
工作求职信
2014/07/04 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
消防演习感想
2015/08/10 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python