From dc9b7d52ee90a34a8dea7c20583f1e3d68faf510 Mon Sep 17 00:00:00 2001
From: Russell Haering <russell.haering@rackspace.com>
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
+    )