Use python logging in install / log cherrypy at right severity
[cascardo/ipsilon.git] / ipsilon / util / log.py
index 857a5ba..ae851af 100644 (file)
@@ -7,6 +7,8 @@ import cStringIO
 import inspect
 import os
 import traceback
+import logging
+
 
 def log_request_response():
     '''Log the contents of the request and subsequent response.
@@ -81,7 +83,7 @@ def log_request_response():
 
     '''
 
-    #--- Begin local functions ---
+    # --- Begin local functions ---
 
     def indent_text(text, level=0, indent='    '):
         '''
@@ -135,6 +137,21 @@ def log_request_response():
         f.close()
         return string
 
+    def print_param(name, value):
+        f = cStringIO.StringIO()
+
+        # Might be a multipart Part object, if so format it
+        if isinstance(value, cherrypy._cpreqbody.Part):  # pylint:disable=W0212
+            f.write(indent_text("%s:\n" % (name)))
+            f.write(indent_text(print_part(value), 1))
+        else:
+            # Not a mulitpart, just write it as a string
+            f.write(indent_text("%s: %s\n" % (name, value)))
+
+        string = f.getvalue()
+        f.close()
+        return string
+
     def collapse_body(body):
         '''The cherrypy response body can be:
 
@@ -170,7 +187,7 @@ def log_request_response():
         f.close()
         return string
 
-    #--- End local functions ---
+    # --- End local functions ---
 
     f = cStringIO.StringIO()
     request = cherrypy.serving.request
@@ -179,8 +196,8 @@ def log_request_response():
     #
     # Log the Request
     #
-    f.write(indent_text("<Request> [%s] %s\n" % \
-                      (remote.name or remote.ip, request.request_line), 0))
+    f.write(indent_text("<Request> [%s] %s\n" %
+                        (remote.name or remote.ip, request.request_line), 0))
 
     # Request Headers
     if request.headers:
@@ -196,16 +213,10 @@ def log_request_response():
             # Multi-valued paramater is in a list
             if isinstance(value, list):
                 for i, item in enumerate(value):
-                    # Might be a multipart Part object, if so format it
-                    if isinstance(item, cherrypy._cpreqbody.Part):
-                        f.write(indent_text("%s[%s]:\n" % (name, i), 2))
-                        f.write(indent_text(print_part(item), 3))
-                    else:
-                        # Not a mulitpart, just write it as a string
-                        f.write(indent_text("%s[%s]: %s\n" % (name, i, item), 2))
+                    f.write(indent_text(print_param("%s[%d]" % (name, i),
+                                                    item), 2))
             else:
-                # Just a string value
-                f.write(indent_text("%s: %s\n" % (name, value), 2))
+                f.write(indent_text(print_param(name, value), 2))
 
     # If the body is multipart format each of the parts
     if request.body.parts:
@@ -243,7 +254,8 @@ def log_request_response():
     f.close()
     print string
 
-cherrypy.tools.log_request_response = cherrypy.Tool('on_end_resource', log_request_response)
+cherrypy.tools.log_request_response = cherrypy.Tool('on_end_resource',
+                                                    log_request_response)
 
 
 class Log(object):
@@ -277,7 +289,7 @@ class Log(object):
         args, _, _, value_dict = inspect.getargvalues(frame_obj)
         # Is the functions first parameter named 'self'?
         if len(args) and args[0] == 'self':
-        # in that case, 'self' will be referenced in value_dict
+            # in that case, 'self' will be referenced in value_dict
             instance = value_dict.get('self', None)
             if instance:
                 # return its class
@@ -304,7 +316,6 @@ class Log(object):
             location = '%s:%s %s()' % (filename, line_number, func)
         return location
 
-
     def debug(self, fact):
         if cherrypy.config.get('debug', False):
             location = Log.call_location()
@@ -317,6 +328,6 @@ class Log(object):
         cherrypy.log(fact)
 
     def error(self, fact):
-        cherrypy.log.error('ERROR: %s' % fact)
+        cherrypy.log.error('ERROR: %s' % fact, severity=logging.ERROR)
         if cherrypy.config.get('stacktrace_on_error', False):
             cherrypy.log.error(Log.stacktrace())