当应用处于生产环境时,日志提供了有价值的运行时调试及监控信息,并且,也是一个有用的调试工具对于处于开发阶段的应用来说。此文描述在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: 日志测试 (译者增加)

  1. 如果配置了一个日志文件选项"logfile",Odoo 日志会使用一个文件处理器(TimedRotatingFileHandler,WatchedFileHandler 和FileHandler三者之一)将日志信息写入文件。(译者增加)处理器不需要显示设置,如果logrotate被设置为True,则处理器为TimedRotatingFileHandler;如果设置为False,则处理器为FileHandler或者WatchedFileHandler
  2. 如果没有配置日志文件选项"logfile",日志信息会被输出到控制台
  3. 如果配置了日志数据库选项”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/

Odoo/OpenERP 日志配置、使用及实现的更多相关文章

  1. Odoo (OpenERP/TinyERP)-10.0 (Debian 8)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: odoo-10.0 commercial erp odoo open source openerp tinyerp 服务优惠价: 按服务商许可协议 ...

  2. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

  3. nginx日志配置

    nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...

  4. 日志配置logback

    在选择项目日志框架时,发现log4j的作者开发了新的日志框架,据说性能提高不少,那就选它了,不过,除了配置上有点不习惯外,最重要的一点 ,打印线程号这个功能依然没有(打印线程名这个东西是在是个鸡肋). ...

  5. 服务器是windows时tomcat无法打印所有日志配置修改

    Tomcat运行仅一天磁盘空间突然就增加了很多,发现是日志文件太大了,修改tomcat的日志配置即可. 查看目录所占空间大小: ? 1 [root@XXX webapps]du -sh 清理方法: ? ...

  6. [译]Stairway to Integration Services Level 12 - 高级日志配置

    介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾    Reviewing SSIS Task Events 在做实 ...

  7. [译]Stairway to Integration Services Level 11 - 日志配置

    介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...

  8. Nginx日志配置及日志切割

    日志配置 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_s ...

  9. SpringBoot之简单日志配置

    我的目的指定一个文件夹输出:(不采用指定文件的原因是一个文件的大小时间长了会很大,不利于处理) logging: level: root: INFO org.sselab: controller: I ...

随机推荐

  1. 【leetcode】200. Number of Islands

    原题: Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is s ...

  2. linux——(2)文件权限与目录配置

    概念一:用户与用户组 对linux下的每一个文件或者目录来说,访问者都有三种身份:所有者,用户组,其他人.这三种人对于同一个文件的权限是可以分开设定的. 概念二:linux文件权限 文件和目录都有3种 ...

  3. [BZOJ3238][AHOI2013]差异(后缀数组)

    求和式的前两项可以直接算,问题是对于每对i,j计算LCP. 一个比较显然的性质是,LCP(i,j)是h[rk[i]+1~rk[j]]中的最小值. 从h的每个元素角度考虑,就是对每个h计算有多少对i,j ...

  4. BZOJ 4327 JSOI2012 玄武密码(后缀自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每 ...

  5. [转]115个Java面试题和答案——终极列表(上)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  6. [转][Navicat for MySQL系列]Navicat如何使用(二)

    上一篇经验已经建立了数据连接,这篇我介绍一下Navicat for MySQL的“增删改查”功能是如何操作的. 工具/原料 Navicat for MySQL 10.1.7 数据库操作(基本) 1 远 ...

  7. NHibernate 过滤器(第十五篇)

    NHibernate过滤器相当于定义一个非常类似于类和集合上使用的where子句.ISession 中默认是不启用过滤器的,必须通过ISession.EnableFilter()方法显式的启用. 该方 ...

  8. 如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况

    https://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完 ...

  9. Mysql客户端下载地址

    官网:http://dev.mysql.com/downloads/mysql/   上述千万不要下载免安装版本. 千万记住一定要下载MSI安装版本.

  10. Android-25种开源炫酷动画框架

    前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮助,此博文介绍的都是UI上面的框架,接下来会有 ...