summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2014-05-28 11:43:24 +0200
committerChristophe Simonis <chs@odoo.com>2014-05-28 11:43:24 +0200
commitb4283f027175cf80f83d57a1585cc1a8a3ea3b34 (patch)
tree41095eaddb6de6bb3954ff663d8beb667995b241
parent04211015fc3d4be2a8c65b9d977c2d9c4dac8be7 (diff)
[FIX] logging PostgreSQLHandler: expand message + use contextmanagers to handle exceptions and cursor
-rw-r--r--openerp/netsvc.py36
-rw-r--r--openerp/tools/misc.py8
2 files changed, 23 insertions, 21 deletions
diff --git a/openerp/netsvc.py b/openerp/netsvc.py
index 15f02645d52..59a155ff2d0 100644
--- a/openerp/netsvc.py
+++ b/openerp/netsvc.py
@@ -77,26 +77,22 @@ class PostgreSQLHandler(logging.Handler):
ct_db = getattr(ct, 'dbname', None)
ct_uid = getattr(ct, 'uid', None)
dbname = tools.config['log_db'] or ct_db
- if dbname:
- cr = None
- try:
- cr = sql_db.db_connect(dbname).cursor()
- msg = unicode(record.msg)
- traceback = getattr(record, 'exc_text', '')
- if traceback:
- msg = "%s\n%s" % (msg, traceback)
- level = logging.getLevelName(record.levelno)
- val = (ct_uid, ct_uid, 'server', ct_db, record.name, level, msg, record.pathname, record.lineno, record.funcName)
- cr.execute("""
- INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, path, line, func)
- VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
- """, val )
- cr.commit()
- except Exception, e:
- pass
- finally:
- if cr:
- cr.close()
+ if not dbname:
+ return
+ with tools.ignore(Exception), sql_db.db_connect(dbname).cursor() as cr:
+ msg = tools.ustr(record.msg)
+ if record.args:
+ msg = msg % record.args
+ traceback = getattr(record, 'exc_text', '')
+ if traceback:
+ msg = "%s\n%s" % (msg, traceback)
+ # we do not use record.levelname because it may have been changed by ColoredFormatter.
+ levelname = logging.getLevelName(record.levelno)
+ val = (ct_uid, ct_uid, 'server', ct_db, record.name, levelname, msg, record.pathname, record.lineno, record.funcName)
+ cr.execute("""
+ INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, path, line, func)
+ VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
+ """, val)
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, _NOTHING, DEFAULT = range(10)
#The background is set with 40 plus the number of the color, and the foreground with 30
diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py
index 827b6b76297..2b14a1d5eeb 100644
--- a/openerp/tools/misc.py
+++ b/openerp/tools/misc.py
@@ -27,6 +27,7 @@ Miscellaneous tools used by OpenERP.
from functools import wraps
import cProfile
+from contextlib import contextmanager
import subprocess
import logging
import os
@@ -1209,6 +1210,11 @@ def dumpstacks(sig=None, frame=None):
_logger.info("\n".join(code))
-
+@contextmanager
+def ignore(*exc):
+ try:
+ yield
+ except exc:
+ pass
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: