(38) 日志运用

Posted toby2chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(38) 日志运用相关的知识,希望对你有一定的参考价值。

   当应用处于生产环境时,日志提供了有价值的运行时调试及监控信息,并且,
也是一个有用的调试工具对于处于开发阶段的应用来说。此文描述在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的
配置语法--在键值对的两边没有引号或者方括号
      
[plain]
log_level = debug_sql 
log_handler = openerp.addons.my_addon1:DEBUG,openerp.addons.my_addon2:DEBUG 
在代码中使用日志
在Odoo addon模块*.py文件中使用日志是比较简单的.针对不同的日志级别,推荐使用下面的例子代码
 
[python]
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方法调用

原文:http://blog.sina.com.cn/s/blog_729a47890102vcoo.html

以上是关于(38) 日志运用的主要内容,如果未能解决你的问题,请参考以下文章

如何运用Linux进行查看toncat日志

运用 Elastic Stack 收集 docker 容器日志

Elasticsearch:运用 Python 实时通过 Logstash 写入日志到 Elasticsearch

日志记录(logging模块的简单运用)

日志统计中awk常见的运用

java怎么运用切面编程生成日志