我对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框架的任何(严重)替代方案?
感谢阅读所有这些!
我真的很感激任何指针,
亲切的问候,
答案 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找到了一个“很好”(以红宝石方式)文档。