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文件配置的步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
我有spring boot的申请。我需要将spring boot配置文件连接到maven配置文件,所以当我调用命令时 或 它应该调用spring boot加载application-dev.yml或application-prod.yml。当我打电话的时候 它应该在启动之前调用application-dev.yml文件。因此需要从2个命令调用spring boot开发配置文件。我有一个问题,每次我
问题内容: 我正在尝试使用Maven 3 在Spring Boot应用程序中设置活动配置文件。在我的pom.xml中,将默认的活动配置文件和属性spring.profiles.active设置 为development: 但是每次我运行应用程序时,都会在日志中收到以下消息: 并且将SpringBoot配置文件设置为默认值(读取application.properties而不是application
问题内容: 我已升级到angular2 RC6,并希望在引导AppModule之前加载外部JSON配置文件。在RC5之前,我已经进行了这项工作,但是现在很难找到一种等效的方式来注入此数据。 这样做虽然很好,但是很难更改为与RC6一起使用。 我正在尝试以下方法,但是努力用加载的数据修改我的预定义AppModule: 问题答案: 我有同样的问题。好像您遇到了我的要点 :-) 至于RC6更新,您应该签出
我正在尝试通过配置文件配置 在我的Spring。我添加的xml 充满了像这样的东西 然后我在Spring配置中设置它,通过${metrics.reporter.type}访问该属性 在Web应用程序启动过程中,Spring由于上面的而抛出 配置问题:未找到报告类型${metrics.reporter.type}的ReporterElementParser 我正在为mongo主机和端口使用这种配置方
我一直在写的脚本工作得很好。我刚刚添加了一个选项,这样它就可以使用这个代码在chrome上打开一个配置文件。 使用时,我得到这个错误代码。 我该怎么解决这个问题?
或者可以在controller创建之后,使用configure API来配置controller,具体使用方式如下所示: controller.configure(configs); configure API接受的参数和通过构造函数配置配置一样,可以查看 配置参数表 了解各个配置参数的详细解释。