Odoo Logging 的配置,使用和实现
-
Odoo Logging Configuration, Usage and Implementation
转自本人博客( [检测到链接无效,已移除]
Overview
Logging provides valuable runtime debugging/monitoring information when an application is on production. It is also a helpful tool in debugging application in development phase. This blog describes the logging configuration, usage and implementation in Odoo 8.0.
logging configuration
Odoo uses the Python standard logging library. However, it uses a special configuration syntax to configure logging levels for its modules. Following are a complete list of Odoo logging configuration options:
logfile: the log filename. If not set, use stdout.
logrotate: True/False. If True, create a daily log file and keep 30 files.
log_db: Ture/False. If Ture, also write log to 'ir_logging' table in database.
log_level: any value in the list of ['debug_rpc_answer', 'debug_rpc', 'debug', 'debug_sql', 'info', 'warn', 'error', 'critical']. Odoo changed the log_level meaning here because this level values are mapped to a set of predefined 'module:log_level' pairs. Even this option is not set, there is a set of predefined settings. See the following implementation section for details.
log_handler: can be a list of 'module:log_level' pairs. The default value is ':INFO' -- it means the default logging level is 'INFO' for all modules.
logging in your code
Using logging in an Odoo addon is simple. The following is an example with the recommended use of different logging levels:
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")
Examples of logging configuration are listed below. Please pay attention to the syntax of log_handler -- not quotation or square bracket around the value.
log_level = debug_sql
log_handler = openerp.addons.my_addon1:DEBUG,openerp.addons.my_addon2:DEBUG
## Odoo logging implementation
Odoo logging functions are defined inopenerpr/netsvc.py
.
Logging initialization is defined in theinit_logger()
function.
After callingtools.translated.resetlocal()
, it sets a
logging format that consists of the following fields:
> time, process id, logging level, database name, module name,
> and logging message.
If alogfile
configuration option is provided, it uses a file
handler (one of TimedRotatingFileHandler, WatchedFileHandler,
and FileHandler) to log messages to a file.
If nologfile
is configured, it logs messages to stdout.
Iflog_db
is configured with a database name, it logs message
to their.logging
table in the specified database.
It readslog_level
configuration option that is pre-mapped as one of the
following:
```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'],
}
It reads log_handler configuration option that defines mappings of a module and its logging level. The default is :INFO. Then it combines the mapped value of log_level option, log_handler and the following default logging configuration:
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',
]
Finally, it set logging level for every module in the combined list of 'module:log_level' pairs.
The init_logger() is called by parse_config() method in openerp/tools/config.py that is called by the main() method in openerp/cli/server.py.
Note: it seems that the openerp/loglevels.py is not used by any module.