From dc9b7d52ee90a34a8dea7c20583f1e3d68faf510 Mon Sep 17 00:00:00 2001 From: Russell Haering Date: Fri, 10 Jan 2014 16:09:30 -0800 Subject: [PATCH] add a logging module to configure structlog --- teeth_agent/logging.py | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 teeth_agent/logging.py diff --git a/teeth_agent/logging.py b/teeth_agent/logging.py new file mode 100644 index 000000000..bdfd9afc4 --- /dev/null +++ b/teeth_agent/logging.py @@ -0,0 +1,44 @@ +""" +Copyright 2013 Rackspace, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import traceback + +import structlog + +EXCEPTION_LOG_METHODS = ['error'] + + +def _capture_stack_trace(logger, method, event): + if method in EXCEPTION_LOG_METHODS: + event['exception'] = traceback.format_exc() + + return event + + +def configure(pretty=False): + processors = [ + _capture_stack_trace, + ] + + if pretty: + processors.append(structlog.processors.ExceptionPrettyPrinter()) + processors.append(structlog.processors.KeyValueRenderer()) + else: + processors.append(structlog.processors.JSONRenderer()) + + structlog.configure( + processors=processors + )