概述
生产环境,日志提供运行时调试及监控信息,于开发阶段也有用。记录日志助查询数据更改、错误,定位bug等,_logger用标准库初始化,以python内部变量__name__标示模块相关日志信息。
日志配置
用Python标准日志库logging。用特殊配置语法为模块配置日志级别。日志配置完整选项:
logfile:日志文件名,如opt/odoo.log. 不设置,则默认为stdout,输出到控制台
logrotate:True/False.如设True,每天建个文件,存30天
log_db:Ture/False. 如设True, 写入数据库“ir_logging”表
log_level:级别 , [‘debug_rpc_answer’, ‘debug_rpc’, ‘debug’, ‘debug_sql’, ‘info’, ‘warn’, ‘error’, ‘critical’]中任意项. 被映射到预先定义的"module:log_level"键值对集合,即使选项没被设置,用预先定义设置为默认设置。具体见日志实现。
log_handler: 值为"module:log_level"键值对。“Module”模块名,如:“odoo.addons.account”或“odoo.addons.*”。"log_level"默认为“INFO” – 对所有模块,默认日志级是’INFO’
例子日志配置(odoo.conf),log_handler配置语法–键值对两边没有引号或方括号
log_level = debug_sql
log_handler = odoo.addons.tx_b_addons:DEBUG,odoo.addons.tx_e_addons:DEBUG
日志使用
Odoo addon模块*.py文件用日志简单.不同级别,用下例子代码
import logging
_logger = logging.getLogger(__name__)
_logger.debug("debug message for debugging only")
_logger.info("information message to report important modular event")
_logger.warning("warning message to report minor issues")
_logger.error("error message to report failed operations")
_logger.critical("critical message -- so bad that the module cannot work")
日志实现
“odoo/netsvc.py”初始化定义方法“init_logger()”,“tools.translated.resetlocal()“被调后,被设为包含以下字段格式:
time,process id,logging level,database name,module name,logging message
例如:2024-03-23 01:32:34,915 42328 INFO odoo odoo.addons.test: 日志测试
配置"logfile",用文件处理器(TimedRotatingFileHandler,WatchedFileHandler 和FileHandler)写入。处理器不需显示设置,如logrotate设为True,则处理器为TimedRotatingFileHandler;如设为False,则处理器为FileHandler或者WatchedFileHandler
如没"logfile",输出到控制台
配置”log_db“,写入数据库”ir.logging“表
从预先配置映射键值对象PSEUDOCONFIG_MAPPER读取不同模块日志级别注:对象配置在odoo/netsvc.py
Odoo读取配置模块和日志级别映射的log_handler,应用所有模块。默认级别:INFO. 默认配置:
PSEUDOCONFIG_MAPPER = {
'debug_rpc_answer': ['odoo:DEBUG','odoo.http.rpc.request:DEBUG', 'odoo.http.rpc.response:DEBUG'],
'debug_rpc': ['odoo:DEBUG','odoo.http.rpc.request:DEBUG'],
'debug': ['odoo:DEBUG'],
'debug_sql': ['odoo.sql_db:DEBUG'],
'info': [],
'warn': ['odoo:WARNING', 'werkzeug:WARNING'],
'error': ['odoo:ERROR', 'werkzeug:ERROR'],
'critical': ['odoo:CRITICAL', 'werkzeug:CRITICAL'],
}
注:对象配置在odoo/netsvc.py
日志初始化调: init_logger()被odoo/tools/config.py中parse_config()调用,而 parse_config()方法被odoo/cli/server.py中main方法调用
DEFAULT_LOG_CONFIGURATION = [
'odoo.workflow.workitem:WARNING',
'odoo.http.rpc.request:INFO',
'odoo.http.rpc.response:INFO',
'odoo.addons.web.http:INFO',
'odoo.sql_db:INFO',
':INFO',//所有模块设置日志级别
]
异常
odoo中有exceptions类进行异常处理
form odoo import exceptions
raise exceptions.Warning('告警信息')
raise exceptions.ValidationError('验证错误')
日志和异常写在模型(models文件夹中类),业务逻辑方面函数中添加告警和错误有助于检查错误和异常,优化代码。
联系方式
手机:13822161573 微信:txsolarterms QQ:419396409