Log4r:logger继承,yaml配置,替代方案?

时间:2010-05-18 10:04:35

标签: ruby-on-rails ruby enterprise logging log4r

我对ruby环境很陌生,我正在寻找一个很好的日志框架来使用它我的ruby和rails应用程序。

在我以前的经验,我已经成功地使用的log4j和log4p(perl的端口)和期待的可用性(和成熟)与log4r的相同水平。

但是我必须说在log4r框架中有许多事情根本不清楚。

1记录器继承

似乎根本没有管理记录器继承!

如果我声明一个名为'myapp'的记录器然后尝试获取记录器名称'myapp :: engine',则查找将以NameError结束。

我希望框架根据命名方案返回根记录器并使用'myapp'记录器。

Q1 :当然我可以解决这个问题并使用查找方法自行管理名称,但有没有更简洁的方法来执行此操作而无需任何额外的编码?

2 YAML配置

令我困惑的第二件事是yaml配置。在log4r网站上几乎没有关于这个系统的信息,文档链接转发到缺失的页面,所以我能找到的所有信息都包含在gem的examples目录中。

我对yaml配置必须包含pre_config部分以及我需要定义自己的级别这一事实感到非常困惑。

如果我删除pre_config secion,或更换由通用的标准(调试,信息,警告,是致命的)所有的“自定义”的水平时,例如将抛出以下错误:

log4r/yamlconfigurator.rb:68:in `decode_yaml': Log level must be in 0..7 (ArgumentError)

所以似乎没有办法使用一个简单的文件,我们只为框架声明了记录器和追加器。

Q2 :我真的认为我错过了一些东西,而且必须提供一个简单的yaml conf文件。你有这种用法的例子吗?

3 XML文件中的变量替换

Q3 :Yaml配置系统似乎提供了这样的功能,但是我无法找到与XML文件类似的功能。有什么想法吗?

4种替代品?

我必须说,与log4j和其他log4j端口相比,我对log4r的功能级别和成熟度感到非常失望。

我遇到了这个框架,其背景是使用其他语言记录API,并且发现自己在各种类型中工作,只是为了让“基本事物”在“真实世界的应用程序”中运行。

我的意思是几个宝石,控制台/脚本的应用程序构成的复杂的应用程序,和一个导轨web前端其中配置必须mutualized并且其中我们作出的命名空间和继承的密集使用。

为了找到更合适或更成熟的东西,我进行了多次搜索,但没有找到类似的东西。

Q4 :您是否知道可以在企业级应用中使用的log4r框架的任何(严重)替代方案?

感谢阅读所有这些!

我真的很感激任何指针,

亲切的问候,

2 个答案:

答案 0 :(得分:2)

我同意log4r文档很差。我们正在使用它,它很适合我们,让我们说 - 一个企业应用程序。

我们没有使用记录器继承,因此我无法帮助您,而且我也不知道任何替代软件,但是:

这是我们用来读取YAML配置的代码(事实上,我认为我们已将其传递为已加载到Hash中),它还支持变量替换:

require 'log4r'
require 'log4r/yamlconfigurator'

y = "log4r_config:

  # define all loggers ...
  loggers:
    - name      : production
      level     : INFO
      trace     : 'false'
      outputters:
        - stdout

  # define all outputters (incl. formatters)      
  outputters:
    - type     : StdoutOutputter
      name     : stdout
      formatter:
        date_pattern: '%Y-%m-%d %H:%M:%S'
        pattern     : '%d %l: #\{TEST\} %m '
        type        : PatternFormatter"

h = YAML.load y
log_cfg = YamlConfigurator
log_cfg['TEST'] = 'foobar'
log_cfg.decode_yaml h['log4r_config']
@log = Logger['production']
@log.info 'test'
#=>2010-05-20 14:36:32 INFO: foobar test 

答案 1 :(得分:0)

由于我仍然在与yaml配置“斗争”,我在XML配置的代码中挖掘了一点,并找到了 Q3 的答案,以确认param替换。

实际上它的工作方式与yaml的工作方式非常相似,所有你需要的是在xml文件中用#{VARNAME}引用params:

<filename>#{logdir}/processing.log</filename>

并在读取xml文件之前在配置器中设置它们:

Log4r::Configurator['logdir']=log_dir_param
...
Log4r::Configurator.load_xml_file(conf_file_xml)

当我提到log4r文档真的很糟糕(很多404错误)时,我在讨论rubyforge上提供的doc ...

我最后通过查看sourceforge项目结束,并在http://log4r.sourceforge.net/rdoc找到了一个“很好”(以红宝石方式)文档。