def init_app(self, app, *args, **kwargs): super().init_app(app, service_name=app.config.get('APP_NAME', 'app'), server_url=app.config.get('APM_SERVER_URL', 'http://apm:8200'), logging=True, debug=True, capture_body='all') handler = LoggingHandler(client=self.client) handler.setLevel(logging.DEBUG) app.logger.addHandler(handler) self.is_initialized = True @app.before_request def apm_user_context(): # importing over here as it won't work outside request context from flask import request initiator = request.headers.get('X-Initiator') if initiator: set_user_context(user_id=initiator)
@app.route('/bar') def bar_route(): return bar() @elasticapm.capture_span() def bar(): extra() return "bar" @elasticapm.capture_span() def extra(): return "extra" @app.route('/oof') def oof_route(): raise Exception('oof') if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.environ['FLASK_PORT'])) # Create a logging handler and attach it. handler = LoggingHandler(client=apm.client) handler.setLevel(logging.INFO) app.logger.addHandler(handler)
for i in range(1, 10): try: 1 / 0 except ZeroDivisionError: app.logger.error('Breninho is hereeeee', exc_info=True, extra={ 'am_i_agent_breno': True, }) try: a = [1, 2, 3] print a[4] except IndexError: app.logger.error('Breno is here', exc_info=True, extra={ 'am_i_agent_breno': True, }) return {'Heeeeeey': 'Im generating a lot of error to you'} api.add_resource(ElasticBrenoResource, '/error') if __name__ == '__main__': handler = LoggingHandler(client=apm.client) handler.setLevel('WARN') app.logger.addHandler(handler) app.run(host='0.0.0.0', port=9999, debug=True)
# Configure logging if os.environ['ELASTIC_APM_SERVICE_NAME'] and os.environ[ 'ELASTIC_APM_SERVER_URL']: # configure to use ELASTIC_APM in your application's settings from elasticapm.contrib.flask import ElasticAPM app.config['ELASTIC_APM'] = { # allowed app_name chars: a-z, A-Z, 0-9, -, _, and space from elasticapm.contrib.flask 'APP_NAME': os.environ['ELASTIC_APM_SERVICE_NAME'], # 'SECRET_TOKEN': 'yourToken', #if you set on the APM server configuration 'SERVER_URL': os.environ['ELASTIC_APM_SERVER_URL'] # your APM server url } apm = ElasticAPM(app) handler = LoggingHandler(client=apm.client) handler.setLevel(logging.WARN) app.logger.addHandler(handler) # Example usage: # app.logger.error('Failed to send: Invalid number', # exc_info=True, # extra={ # 'uid': uid # }) logger = log_manager.get_logger('api_manager') @app.route("/ping") def ping(): return 'healthy', 200