11

Railsアプリケーションでsyslogを使用することを考えています。プロセスの概要は、このブログ投稿にあります。

  1. gem 'SyslogLogger'あなたに追加Gemfile
  2. require 'syslog_logger'の上部に追加config/environments/production.rb
  3. またconfig.logger =、同じファイルの行のコメントを解除します。

プロダクションボックスには、乗客を使用して実行されている4つのレールアプリケーションがあります。4つのアプリケーションすべてにsysloggerを使用するように切り替えると、4つのアプリケーションすべてからのログメッセージが1つのファイルに送られ、ログメッセージがインターリーブされるのではないかと心配しています。もちろん、splunkを使用することもできますが、最初に、Railsアプリケーションごとに1つのログファイルを取得できるかどうかを確認したいと思いました。それは私の状況にとって望ましいことです。

それは可能ですか?

4

2 に答える 2

5

@cite の回答は、アプリを区別するための 1 つのオプションをカバーしています。ただし、syslog メッセージのフレーミングには、実際にはさらに簡単にする 2 つのフィールドがありhostnameますtag

hostnameメッセージを中央サーバーに転送する前に、システム syslog デーモンによって設定されます。これは、同じシステム上のすべてのアプリで同じですが、サーバーが 1 つを超えると便利な場合があります。

より興味深いのはtag. アプリはtagインスタンス化するタイミングを定義しますSyslogLogger。例えば:

SyslogLogger.new('app1')

ロガー クラスはシステム syslogd に として送信しapp1、ローカル ログ ファイルとリモート syslog 宛先の両方に表示されます (ログ メッセージ自体を変更する必要はありません)。デフォルトは ですrails。すべての最新の syslog デーモンは、に基づいてフィルタリングできますtagprogram()syslog-ng および$programnamersyslogについては、を参照してください。

また、基本的には Cと関数をSyslogLoggerラップしているため、基本的にすべてのログ後の構成はシステム デーモンで行われることに注意してください。一般的にはそれが望ましいですが、Rails アプリが特定の宛先に直接ログを記録することが必要な場合もあります (自動展開を簡素化したり、 で許可されていない属性を変更したり、システム デーモンにアクセスできない環境で実行したりする場合など)。openlog()syslog()syslog()

そのようなケースがいくつLoggerか発生したため、UDP パケット自体を生成するドロップインの代替品を作成しました。remote_syslog_logger宝石はGitHubあります。

于 2012-04-06T23:43:31.413 に答える
2

はい、デフォルトでは、ほぼすべての Unixがorファシリティでsyslogds指定されたメッセージを同じファイルに書き込みます。ただし、私が知っている限りでは、施設ごとにログファイルを指定できるため、最初のアプリケーションのログを に、2 番目のアプリケーションのログを に、というように指定できます。userlocal*syslogdlocal1.*local2.*

さらに、次のような新しい syslog デーモンsyslog-ngでは、正規表現に対してメッセージを評価することで、メッセージを別のファイルに分割することができます (railsapp_1それらに含まれるログ文字列を書き込みます/var/log/railsapp_1.log)。

したがって、syslogd適切に構成すれば完了です (システムのマニュアルページが役に立たない場合は、その構成の変更に関する詳細を serverfault.com で確認する必要があります)

于 2009-09-19T11:45:33.943 に答える