首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4r :记录器继承,yaml配置,替代?

Log4r :记录器继承,yaml配置,替代?
EN

Stack Overflow用户
提问于 2010-05-18 10:04:35
回答 2查看 3.4K关注 0票数 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 secion,或用标准级别(调试、信息、警告、致命)替换所有“自定义”级别,则该示例将引发以下错误:

代码语言:javascript
复制
log4r/yamlconfigurator.rb:68:in `decode_yaml': Log level must be in 0..7 (ArgumentError)

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

Q2:我真的认为我遗漏了一些东西,这肯定是提供一个简单的yaml conf文件的一种方式。你有这种用法的例子吗?

XML文件中的3变量替换

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

4替代品?

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

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

我指的是一个复杂的应用程序,它由几个gems、控制台/脚本应用程序和rails web前端组成,其中配置必须是互操作的,并且我们需要大量使用名称空间和继承。

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

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

感谢阅读所有这些!

我真的很感激你给我指点,

致以亲切的问候,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-18 14:59:49

我同意log4r文档非常糟糕。不过,我们正在使用它,它为我们提供了很好的服务,比如一个企业级的应用程序。

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

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

代码语言:javascript
复制
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 
票数 2
EN

Stack Overflow用户

发布于 2010-05-19 09:01:29

由于我仍然在与yaml配置进行“斗争”,所以我在XML配置的代码中进行了一些挖掘,并找到了Q3的答案。

实际上,它的工作方式与yaml非常相似,您只需要引用xml文件中的#{VARNAME}的参数:

代码语言:javascript
复制
<filename>#{logdir}/processing.log</filename>

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

代码语言:javascript
复制
Log4r::Configurator['logdir']=log_dir_param
...
Log4r::Configurator.load_xml_file(conf_file_xml)

另外,当我提到log4r文档的状态很糟糕(很多404错误)时,我说的是rubyforge上可用的文档.

最后,我查看了sourceforge项目,并在http://log4r.sourceforge.net/rdoc上找到了一个“不错”(以红宝石的方式)文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2856205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档