Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyでログを使用してイベントとエラーメッセージを追跡する方法

ロギングは、Rubyアプリケーションが実行していることに関する情報を保存するプロセスです。

開発環境と本番環境の両方で非常に役立ちます。

なぜですか?

ロギングの全体的なポイントは、何が起こったのか、何がうまくいかなかったのか、何がうまくいったのかに関する情報を収集することだからです。

あらゆる種類の情報をログに記録できます

  • 遅いSQLクエリ(それらを見つけて修正できるようにするため)
  • エラーメッセージ
  • 詳細なリクエスト情報(URL、コントローラー、パラメーター、ビューなど)

この情報を使用すると、アプリケーションの問題の原因をより迅速に診断して見つけることができます。

Railsアプリでは、ログは/logの下に保存されます フォルダ。

開発モードでは、development.log ファイルが使用され、rails serverを実行している端末にログ出力が表示されます オン。

Loggerを使用してRubyにログインする方法を学びましょう クラス!

ロガークラス

Ruby Loggerクラスは、デフォルトの出力形式とさまざまなレベルの重大度でログを生成する方法を提供します。

ログを作成する方法は次のとおりです

logger = Logger.new("my_log.txt")

これにより、ログメッセージがmy_log.txtに書き込まれます。 。

プログラムが実行されている端末にメッセージを表示したい場合は、STDOUTにログインできます。 。

このように

logger = Logger.new(STDOUT)

ロギングメッセージのレベルは、メッセージの重要度に応じて異なります。

レベルは

  • デバッグ
  • 情報
  • 警告
  • エラー
  • 致命的
  • 不明

すべてのレベルに対応するインスタンスメソッドがあります。

したがって、「情報」をログに記録する場合。

これを行う

logger.info("I'm reading a RubyGuide about logging!")

実際のログエントリは次のようになります

# I, [2019-08-08T19:22:00.152079 #642]  INFO -- : I'm reading a RubyGuide about logging!

これらの異なるレベルを使用すると、ログファイルをフィルタリングできるため、探しているものをすばやく見つけることができます。

また、時間の経過とともに生成されるエラーと警告メッセージの数を確認するのにも役立ちます。

素晴らしいものです!

ログをフォーマットする方法

Rubyログにデフォルトの出力形式を使用すると、ツールをその周りに構築でき、より多くの人がその仕組みを理解できるため、優れています。

ここに再びログ行があります

# I, [2019-08-08T19:22:00.152079 #642]  INFO -- : test

これにはいくつかのコンポーネントがあります

  • 「I」は重大度レベルの最初の文字を表します
  • 括弧内には、このログメッセージを生成したプロセスのタイムスタンプとプロセスID(PID)が表示されます
  • INFOは重大度レベルのフルネームです
  • コロンの後に、ログに記録された実際のメッセージがあります

ただし、この形式はすべての人にとって理想的ではない場合があります。

したがって、Rubyでは変更できます!

方法は次のとおりです

logger.formatter = proc { |severity, datetime, progname, msg| "#{severity}, #{datetime}, #{msg}\n" }

その結果、この出力が得られます

DEBUG, 2019-08-08 19:39:01 +0200, testing

これを使用して、あなたとあなたのチームに役立つ可能性のある追加情報を追加できます。

ログサイズを制限する方法

ログのサイズを追跡しない限り、ログは非常に大きなファイルになる可能性があります。

ログが原因でディスク容量が不足すると、システムであらゆる種類の奇妙なことが起こり始めます。

解決策があります!

ログのサイズを制限できます。

方法は次のとおりです

MEGABYTE = 1024 ** 2
ONE_HUNDRED_MEGABYTES = MEGABYTE * 100

logger = Logger.new("my_log.txt", 1, ONE_HUNDRED_MEGABYTES)

最初のパラメータは、ログメッセージを保存する場所です。

2番目のパラメーターは保持するログファイルの数(ログローテーション)であり、最後のパラメーターは最大ファイルサイズです。

ログの読み取りとフィルタリング

はい、ログを取得しました。

それらをどのように読み、必要なものを見つけますか?

ログはプレーンテキストファイルであるため、任意のテキスト処理ツールを使用できます。

Grep。

これは、テキストファイルのフィルタリングに使用できるコマンドラインツールです。

方法は次のとおりです

grep INFO my_log.txt

これにより、「INFO」としてログに記録されたすべての行が表示されます。

その他のテキストを検索できます grepを使用してログ内 、「INFO」を探しているものに置き換えるだけです。

使用できるもう1つのUnixツールはlessと呼ばれます (-Rオプション付き)。

キーボードのみを使用してログをスクロールでき、検索機能があります。 。

使用することもできます…

ログ管理と検索に固有のツール。

Discourseのlogstergemのように。

概要

Rubyへのログイン、Rubyとは何か、どのように機能するか、どのように使用するかについて学びました。

今度はこれを試す番です。

読んでくれてありがとう!


  1. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた

  2. Rubyプログラムをデバッグおよび修正する方法

    あなたのプログラムは、最初にあなたが望むことを正確に実行する頻度はどれくらいですか? 多くの場合、プログラムは期待どおりに機能しないため、ルビーのデバッグの技術を使用する必要があります。 理由を見つけるのに役立ちます。 次のエラーメッセージに精通している可能性があります。 undefined method some_method for nil:NilClass これは、nil値がコードへの道を見つけることができたことを意味します。 この記事で説明する手法を使用して、この問題や同様の問題に対処する方法を学びます。 エラーとスタックトレースを理解する Rubyインタープリターからエラー