85 lines
2.1 KiB
Python
Executable File
85 lines
2.1 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
# (C) 2020 Smile (<http://www.smile.fr>)
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
import datetime
|
|
import logging
|
|
import sys
|
|
|
|
from odoo import registry
|
|
|
|
from .misc import add_timing, add_trace
|
|
|
|
if sys.version_info > (3,):
|
|
long = int
|
|
|
|
|
|
class SmileDBLogger:
|
|
|
|
def __init__(self, dbname, model_name, res_id, uid=0):
|
|
assert isinstance(uid, (int, long)), 'uid should be an integer'
|
|
self._logger = logging.getLogger('smile_log')
|
|
|
|
pid = 0
|
|
|
|
try:
|
|
cr = registry(dbname).cursor()
|
|
cr.autocommit(True)
|
|
cr.execute(
|
|
"select relname from pg_class "
|
|
"where relname='smile_log_seq'")
|
|
if not cr.rowcount:
|
|
cr.execute("create sequence smile_log_seq")
|
|
cr.execute("select nextval('smile_log_seq')")
|
|
res = cr.fetchone()
|
|
pid = res and res[0] or 0
|
|
finally:
|
|
cr.close()
|
|
|
|
self._logger_start = datetime.datetime.now()
|
|
self._logger_args = {
|
|
'dbname': dbname, 'model_name': model_name,
|
|
'res_id': res_id, 'uid': uid, 'pid': pid}
|
|
|
|
@property
|
|
def pid(self):
|
|
return self._logger_args['pid']
|
|
|
|
def setLevel(self, level):
|
|
self._logger.setLevel(level)
|
|
|
|
def getEffectiveLevel(self):
|
|
return self._logger.getEffectiveLevel()
|
|
|
|
def debug(self, msg):
|
|
self._logger.debug(msg, self._logger_args)
|
|
|
|
def info(self, msg):
|
|
self._logger.info(msg, self._logger_args)
|
|
|
|
def warning(self, msg):
|
|
self._logger.warning(msg, self._logger_args)
|
|
|
|
def log(self, msg):
|
|
self._logger.log(msg, self._logger_args)
|
|
|
|
@add_trace
|
|
def error(self, msg):
|
|
self._logger.error(msg, self._logger_args)
|
|
|
|
@add_trace
|
|
def critical(self, msg):
|
|
self._logger.critical(msg, self._logger_args)
|
|
|
|
@add_trace
|
|
def exception(self, msg):
|
|
self._logger.exception(msg, self._logger_args)
|
|
|
|
@add_timing
|
|
def time_info(self, msg):
|
|
self._logger.info(msg, self._logger_args)
|
|
|
|
@add_timing
|
|
def time_debug(self, msg):
|
|
self._logger.debug(msg, self._logger_args)
|