yuthon_base系统日志强化
This commit is contained in:
@@ -1,11 +1,51 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from odoo import models, fields
|
import logging
|
||||||
|
from odoo import models, fields, api, SUPERUSER_ID
|
||||||
|
|
||||||
|
|
||||||
class SystemLogs(models.Model):
|
class SystemLogs(models.Model):
|
||||||
_name = 'system.logs'
|
_name = 'system.logs'
|
||||||
_description = '系统日志'
|
_description = '系统日志'
|
||||||
|
_order = 'date desc'
|
||||||
|
|
||||||
name = fields.Char(string="标题")
|
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="内容")
|
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)
|
||||||
|
|||||||
@@ -4,17 +4,36 @@
|
|||||||
<field name="name">系统日志</field>
|
<field name="name">系统日志</field>
|
||||||
<field name="res_model">system.logs</field>
|
<field name="res_model">system.logs</field>
|
||||||
<field name="view_mode">tree</field>
|
<field name="view_mode">tree</field>
|
||||||
|
<field name="context">{'search_default_today': 1, 'group_by': 'logger_name'}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="view_system_logs_tree" model="ir.ui.view">
|
<record id="view_system_logs_tree" model="ir.ui.view">
|
||||||
<field name="name">system.logs.tree</field>
|
<field name="name">system.logs.tree</field>
|
||||||
<field name="model">system.logs</field>
|
<field name="model">system.logs</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="系统日志">
|
<tree string="系统日志" default_order="date desc">
|
||||||
<field name="name" string="标题"/>
|
|
||||||
<field name="date" string="时间"/>
|
<field name="date" string="时间"/>
|
||||||
<field name="content" string="内容"/>
|
<field name="level" string="级别" decoration-danger="level == 'ERROR'"
|
||||||
|
decoration-warning="level == 'WARNING'" decoration-info="level == 'INFO'"/>
|
||||||
|
<field name="logger_name" string="来源"/>
|
||||||
|
<field name="name" string="标题"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="view_system_logs_search" model="ir.ui.view">
|
||||||
|
<field name="name">system.logs.search</field>
|
||||||
|
<field name="model">system.logs</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search>
|
||||||
|
<filter name="today" string="今天" date="date"/>
|
||||||
|
<filter name="yesterday" string="昨天" date="date" date_adjust="-1"/>
|
||||||
|
<filter name="this_week" string="本周" date="date" date_scope="this_week"/>
|
||||||
|
<separator/>
|
||||||
|
<filter name="group_by_logger" string="按来源分组" context="{'group_by': 'logger_name'}"/>
|
||||||
|
<separator/>
|
||||||
|
<field name="logger_name" string="来源筛选"/>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
Reference in New Issue
Block a user