4

我对 ruby​​ 环境还很陌生,我一直在寻找一个不错的日志记录框架,以便在我的 ruby​​ 和 rails 应用程序中使用它。

在我之前的经验中,我已经成功地使用了 log4j 和 log4p(perl 端口),并且期望与 log4r 具有相同级别的可用性(和成熟度)。

但是我必须说,log4r 框架中有很多东西根本不清楚。

1 记录器继承

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

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

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

Q1:当然我可以解决这个问题并使用查找方法自己管理名称,但是有没有更简洁的方法可以做到这一点而无需任何额外的编码?

2 YAML 配置

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

我很困惑 yaml 配置必须包含 pre_config 部分,并且我需要定义自己的级别。

如果我删除了 pre_config 部分,或者将所有“自定义”级别替换为标准级别(调试、信息、警告、致命),该示例将引发以下错误:

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 的坚实背景遇到了这个框架,发现自己在各种工作中工作只是为了让“基本的东西”在“现实世界的应用程序”中运行。

我的意思是一个复杂的应用程序,由几个 gem、控制台/脚本应用程序和一个 Rails Web 前端组成,其中配置必须相互化,并且我们在其中密集使用命名空间和继承。

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

Q4:你们知道可以在企业级应用程序中使用的 log4r 框架的任何(严重)替代方案吗?

感谢阅读所有这些!

我真的很感激任何指示,

亲切的问候,

4

2 回答 2

2

我同意 log4r 文档很差。我们正在使用它,它为我们提供了很好的服务,比如说一个企业应用程序。

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

这是我们用来读取 YAML 配置的代码(实际上,我认为我们将它作为已经加载到哈希中的方式传递),它还支持变量替换:

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 
于 2010-05-18T14:59:49.493 回答
0

As I'm still 'fighting' with the yaml configuration I digged a little bit in the code of the XML configuration and found the answer for Q3 concenrning the param subsitution.

Actually it works in a very similar way to the yaml stuff, all you need is to reference the params with #{VARNAME} in the xml file:

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

and to set them in the configurator before reading the xml file :

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

Also when I mentionned that the log4r documentation is realy in a bad shape ( lots of 404 error) I was talking about the doc available on rubyforge ...

I finaly ended by looking at the sourceforge project and found a 'nice' (in a ruby way) doc on http://log4r.sourceforge.net/rdoc.

于 2010-05-19T09:01:29.173 回答