4

私はRuby環境にかなり慣れていないので、RubyおよびRailsアプリケーションで使用するための優れたロギングフレームワークを探していました。

以前の経験では、log4jとlog4p(perlポート)の使用に成功し、log4rと同じレベルのユーザビリティ(および成熟度)を期待していました。

ただし、log4rフレームワークにはまったく明確でないことがいくつかあると言わざるを得ません。

1ロガーの継承

ロガーの継承はまったく管理されていないようです!

'myapp'という名前のロガーを宣言してから、ロガー名'myapp :: engine'を取得しようとすると、ルックアップはNameErrorで終了します。

フレームワークが命名スキームに従ってルートロガーを返し、「myapp」ロガーを使用することを期待します。

Q1:もちろん、これを回避し、ルックアップメソッドを使用して自分で名前を管理することはできますが、余分なコーディングなしでこれを行うためのよりクリーンな方法はありますか?

2YAML構成

私を混乱させる2番目のことはyaml構成です。log4rサイトには、このシステムに関する情報は文字通りありません。ドキュメントは欠落しているページにリンクしているため、私が見つけることができるすべての情報は、gemのexamplesディレクトリに含まれています。

yaml構成にはpre_configセクションが含まれている必要があり、独自のレベルを定義する必要があるという事実とはかなり混乱していました。

pre_configセクションを削除するか、すべての「カスタム」レベルを標準レベル(debug、info、warn、fatal)に置き換えると、この例では次のエラーがスローされます。

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

したがって、フレームワークのロガーとアペンダーのみを宣言する単純なファイルを使用する方法はないようです。

Q2:私は本当に何かを逃したと思います、そしてそれは単純なyamlconfファイルを提供する方法であるに違いありません。そのような使い方の例はありますか?

3XMLファイルでの変数の置換

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

私はまだyaml構成と「戦っている」ので、XML構成のコードを少し掘り下げて、param置換を含むQ3の答えを見つけました。

実際には、yamlのものと非常によく似た方法で機能します。必要なのは、xmlファイルで#{VARNAME}を使用してパラメーターを参照することだけです。

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

xmlファイルを読み取る前にコンフィギュレーターでそれらを設定するには:

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

また、log4rのドキュメントが本当に悪い形(404エラーがたくさんある)であると述べたとき、私はrubyforgeで利用可能なドキュメントについて話していました...

最後に、sourceforgeプロジェクトを見て、http://log4r.sourceforge.net/rdocで「素敵な」(ルビーの方法で)ドキュメントを見つけました。

于 2010-05-19T09:01:29.173 に答える