當應用處於生產環境時,日志提供了有價值的運行時調試及監控信息,並且,也是一個有用的調試工具對於處於開發階段的應用來說。此文描述在Odoo8.0中日志的配置、使用及實現
日志配置
Odoo使用Python標准日志庫logging。但是,它使用一種特殊的配置語法來為其模塊配置日志級別。以下為Odoo日志配置的完整選項:
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']. Odoo 設置此日志級別選項的意義在於因為這些級別值被映射到了一個預先定義好的"module:log_level"鍵值對集合,即使這個選項沒有被設置,Odoo則會使用預先定義的設置作為默認設置。具體內容參見下面的日志實現章節。 log_handler: 值可以為"module:log_level"鍵值 對。“Module”表示模塊名,比如:“openerp.addons.account”或者 “openerp.addons.*”。"log_level"默認值為“INFO” -- 也即是對所有模塊來說,默認的日志級別就是'INFO'
下面為一個例子日志配置(譯者注:配置一般放在openerp-server.conf
文件中即可),請注意log_handler的配置語法--在鍵值對的兩邊沒有引號或者方括號
log_level = debug_sql log_handler = openerp.addons.my_addon1:DEBUG,openerp.addons.my_addon2: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日志功能被定義在“openerp/netsvc.py”中,日志的初始化定義在方法“init_logger()”中,在“tools.translated.resetlocal()“被調用之后,日志被設置為包含以下字段的格式:
time,process id,logging level,database name,module name,logging message
例如:2014-09-23 01:32:34,915 42328 INFO odoo openerp.addons.test: 日志測試 (譯者增加)
- 如果配置了一個日志文件選項"logfile",Odoo 日志會使用一個文件處理器(TimedRotatingFileHandler,WatchedFileHandler 和FileHandler三者之一)將日志信息寫入文件。(譯者增加)處理器不需要顯示設置,如果logrotate被設置為True,則處理器為TimedRotatingFileHandler;如果設置為False,則處理器為FileHandler或者WatchedFileHandler
- 如果沒有配置日志文件選項"logfile",日志信息會被輸出到控制台
- 如果配置了日志數據庫選項”log_db“,日志信息會被寫入數據庫中的”ir.logging“表中
Odoo從Odoo中預先配置的映射鍵值對象PSEUDOCONFIG_MAPPER中讀取針對不同模塊的日志級別
[python]
PSEUDOCONFIG_MAPPER = { 'debug_rpc_answer': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG', 'openerp.http.rpc.response:DEBUG'], 'debug_rpc': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG'], 'debug': ['openerp:DEBUG'], 'debug_sql': ['openerp.sql_db:DEBUG'], 'info': [], 'warn': ['openerp:WARNING', 'werkzeug:WARNING'], 'error': ['openerp:ERROR', 'werkzeug:ERROR'], 'critical': ['openerp:CRITICAL', 'werkzeug:CRITICAL'], }
譯者注:該對象配置在openerp/netsvc.py文件中
Odoo讀取配置了模塊和日志級別的映射的log_handler,並應用在所有模塊中。默認日志級別:INFO. 以下為默認配置:
[python]
DEFAULT_LOG_CONFIGURATION = [ 'openerp.workflow.workitem:WARNING', 'openerp.http.rpc.request:INFO', 'openerp.http.rpc.response:INFO', 'openerp.addons.web.http:INFO', 'openerp.sql_db:INFO', ':INFO',//為其他所有模塊設置日志級別 ]
譯者注:該對象配置在openerp/netsvc.py文件中
日志初始化調用:方法 init_logger()
被openerp/tools/config.py
文件中的parse_config()方法調用,而
parse_config()
方法又被openerp/cli/server.py
中的main方法調用
備注:文件 openerp/loglevels.py
看起來沒被任何模塊所使用
原文地址:http://www.mindissoftware.com/2014/09/07/Odoo-logging-configuration-usage-implementation/