From 3e2c2979d8c64affafd10c4c999beee677954024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Mon, 1 Jun 2026 22:40:10 +0800 Subject: [PATCH] =?UTF-8?q?yuthon=5Fbase=E7=B3=BB=E7=BB=9F=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=BC=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_base/models/system_logs.py | 44 +++++++++++++++++++++++-- yuthon_base/views/system_logs_views.xml | 25 ++++++++++++-- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/yuthon_base/models/system_logs.py b/yuthon_base/models/system_logs.py index a7c2a165d..3c51ee424 100644 --- a/yuthon_base/models/system_logs.py +++ b/yuthon_base/models/system_logs.py @@ -1,11 +1,51 @@ # -*- coding: utf-8 -*- -from odoo import models, fields +import logging +from odoo import models, fields, api, SUPERUSER_ID class SystemLogs(models.Model): _name = 'system.logs' _description = '系统日志' + _order = 'date desc' name = fields.Char(string="标题") - date = fields.Datetime(string="时间") + date = fields.Datetime(string="时间", default=fields.Datetime.now) + level = fields.Char(string="级别") + logger_name = fields.Char(string="来源") content = fields.Text(string="内容") + + +class OdooDBLogHandler(logging.Handler): + """将日志写入 system.logs 模型""" + + def emit(self, record): + if record.levelno < logging.INFO: + return + try: + import odoo + db_name = getattr(odoo.tools.config, 'db_name', None) + if not db_name: + return + db = odoo.sql_db.db_connect(db_name) + with db.cursor() as cr: + env = api.Environment(cr, SUPERUSER_ID, {}) + env['system.logs'].create({ + 'name': record.getMessage()[:80] if record.getMessage() else '', + 'date': fields.Datetime.now(), + 'level': record.levelname, + 'logger_name': record.name, + 'content': record.getMessage(), + }) + cr.commit() + except Exception: + pass + + +# 注册 Handler(只注册一次) +_handler_key = 'odoo_db_log_handler' +_root_logger = logging.getLogger() +if not any(getattr(h, 'name', None) == _handler_key for h in _root_logger.handlers): + handler = OdooDBLogHandler() + handler.name = _handler_key + handler.setLevel(logging.INFO) + _root_logger.addHandler(handler) diff --git a/yuthon_base/views/system_logs_views.xml b/yuthon_base/views/system_logs_views.xml index c0b0ff679..f410d74fd 100644 --- a/yuthon_base/views/system_logs_views.xml +++ b/yuthon_base/views/system_logs_views.xml @@ -4,17 +4,36 @@ 系统日志 system.logs tree + {'search_default_today': 1, 'group_by': 'logger_name'} system.logs.tree system.logs - - + - + + + + + + system.logs.search + system.logs + + + + + + + + + + + +