python使用json做配置_python logging通过json文件配置的步骤

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 logging通过json文件配置的步骤

本文地址: http://www.cppcns.com/jiaoben/python/310416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值