タグ付けされた質問 「logging」

コンピュータデータロギングは、システムのアクティビティを理解し、問題を診断するために使用できる監査証跡を提供するために、通常は特定の範囲でコンピュータプログラムにイベントを記録するプロセスです。

3
構造化ロギングと基本ロギングの利点
新しいアプリを作成しています。構造化されたログを含めたいと思います。私の理想的なセットアップはSerilog、C#コードとBunyanJSのようなものです。これらはfluentd、いろいろなものに食い込んでから出て行くことができると、最初は考えていましたelasticsearch + kibana。MySQLデータベースはすでにあるので、短期的にはSerilog + Bunyanのセットアップと開発者がそれを使用することに興味があり、もう少し時間をかけてfluentdと残りを取り込む間にMySQLにログインできます。 :しかし、私たちの経験豊富なプログラマーの一つは、単にような何かを好むlog.debug("Disk quota {0} exceeded by user {1}", quota, user);使用log4netして、同じようにMySQLのに対してSELECT文を実行します:SELECT text FROM logs WHERE text LIKE "Disk quota"; そうは言っても、どのアプローチがより良いか、ロギングシステムのタイプを選択する際にどのようなことを考慮する必要がありますか?
110 c#  javascript  mysql  logging 

6
TRACEレベルが存在する理由と、DEBUGではなくいつ使用する必要があるのですか?
Log4J、Slf4J、およびその他のJavaのロギングフレームワークには、ロギング用に2つの「開発者」レベルがあります。 デバッグ トレース 説明が明確であるため、DEBUGの機能を理解しています。 DEBUGレベルは、アプリケーションのデバッグに最も役立つ詳細な情報イベントを指定します。 しかし、TRACEレベルは、そのユースケースについてあまり明確ではありません。 TRACEレベルは、DEBUGよりもきめ細かい情報イベントを指定します (ソース:log4J JavaDoc) これは、TRACEの使用方法や使用時期を教えてくれません。興味深いことに、これはsyslog標準で定義されている重大度レベルではありません。TRACEとDEBUGの違いをグーグルで検索すると、「DEBUGを使用してください。TRACEもあります」と返されるようです。TRACEレベルの特定のユースケースが見つかりませんでした。私が見つけた最高のものは、レベルの存在のメリットについて議論しているこの古いwikiページでした。 これは、建築家として、私の頭の中にたくさんの旗や質問を投げかけます。若い開発者が私のアーキテクチャにTRACEを追加するように頼んだら、私は彼に質問を投げかけました: DEBUGではなくTRACEで記録する必要がある情報の例は何ですか? その情報を記録することで、どのような特定の問題を解決できますか? これらの例では、DEBUGレベルではなくTRACEレベルでログを明確に区別するログ情報のプロパティは何ですか? その情報がログインフラストラクチャを通過する必要があるのはなぜですか? 単に使用するのではなく、ログジャーナルにその情報を保持することの利点は何System.out.printlnですか? デバッガーよりもログを使用する方が良いのはなぜですか? TRACEレベルでのロギングの標準的な例は何でしょうか? 例のDEBUGではなく、TRACEレベルでログを記録することで得られた具体的な利点は何ですか? なぜこれらのゲインが重要なのですか? 逆に:DEBUGではなくTRACEでログを記録することで回避した問題は何ですか? これらの問題を他にどのように解決できますか?TRACEレベルでのロギングが他のソリューションよりも優れているのはなぜですか? TRACEレベルのログステートメントを製品コードに残すべきですか?どうして? しかし、ほとんどの主要なフレームワークに存在することを考えると、何かに役立つと思いますか?それで... TRACEは何のためにあり、DEBUGと何が違うのですか?
82 java  logging 

14
ほとんどのログファイルがバイナリ形式ではなくプレーンテキストを使用するのはなぜですか?
ロギングは必要ですが、(比較的)ほとんど使用されません。そのため、ストレージの点ではるかにコンパクトにできます。 たとえば、ip、date、timeなどの最も一般的にログに記録されるデータは、整数として表すことができ、テキストとして保存されています。 ロギングがバイナリデータとして保存されている場合、多くのスペースを保存できるため、特に書き込みが制限されているSSDでは、回転が少なく、ディスクの寿命が長くなります。 それほど重要ではない小さな問題だと言う人もいるかもしれませんが、そのようなメカニズムを構築するために必要な労力を考慮すると、それは意味がありません。誰でも2日間ほど空いた時間にこれを作成できます。なぜこれをしないのですか?
81 logging  storage 

9
アプリケーションロギングのパターンとアンチパターンにはどのようなものがありますか?[閉まっている]
最近、大規模なエンタープライズアプリケーションのフィールドの問題を調査する必要がありました。問題を見つけるために調べなければならなかったログに恐怖を覚えましたが、結局のところ、ログはバグの特定/隔離にはまったく役立ちませんでした。 注:すべてのバグがログで発見できるわけではないことを理解しています。これにより、ログが恐ろしいという事実は変わりません。 ロギングには、修正を試みることができる明らかな問題がいくつかあります。ここにリストしたくありません。ログファイルを単純に表示することはできません。 代わりに、ロギングの面で私たちがどれだけ悪いかを評価するために、私は知りたい: アプリケーション(特に大規模アプリケーション)のロギングに関するガイドライン(ある場合)を教えてください。 従うべきパターンや注意すべきアンチパターンはありますか? これは修正する重要なことですか、それとも修正することもできますか、またはすべてのログファイルが単に巨大であり、それらを分析するために補足スクリプトが必要ですか? 補足:log4jを使用します。
66 logging 

3
.NETでのログとトレースのベストプラクティス
私はトレースとログについて多くのことを読んでおり、問題のベストプラクティスの黄金律を見つけようとしましたが、何もありません。優れたプログラマーは優れたトレースを生成すると言いますが、それはそのように言えます。それは経験からもたらされなければなりません。 また、ここやインターネットで同様の質問を読んだことがありますが、質問が詳細を欠いているためか、私が尋ねているものと同じものではなく、満足のいく答えもありません。 そのため、デバッガーをアタッチできない場合、トレースはアプリケーションのデバッグの経験をある程度再現すべきだと人々は言います。アプリケーションの各コントロールポイントでどのパスが使用されているかを確認できるように、十分なコンテキストを提供する必要があります。 さらに詳しく説明すると、「イベントログは、詳細な制御フローではなく主要な状態をキャプチャするという点でトレースとは異なる」という点で、トレースとイベントログを区別することもできます。 ここで、System.Diagnostics名前空間にある標準の.NETクラスのみを使用して、トレースとロギングを実行したいとします。TraceSourceクラスは静的Traceクラスよりもジョブに適していると考えました。トレースレベルを区別し、TraceSourceクラスを使用すると、イベントタイプを通知するパラメータを渡すことができ、Traceクラスを使用する必要があるためです。Trace.WriteLineIfその後、のようなものを確認するSourceSwitch.TraceInformationとしSourceSwitch.TraceErrors、それはさえのような性質がないTraceVerboseかをTraceStart。 これらすべてを念頭に置いて、次のようにすることをお勧めします。 メソッドを開始するときに「開始」イベントをトレースします。これは、メソッドに渡されるパラメーター値のストリング表現とともに、単一の論理操作またはパイプラインを表す必要があります。 データベースにアイテムを挿入するときに「情報」イベントをトレースします。 重要なif / elseステートメントで1つのパスまたは別のパスを取るときに「情報」イベントをトレースします。 回復可能なエラーであるかどうかに応じて、catchブロックで「クリティカル」または「エラー」をトレースします。 メソッドの実行が終了したら、「停止」イベントをトレースします。 また、VerboseおよびWarningイベントタイプをトレースする最適なタイミングを明確にしてください。優れたトレース/ロギングを備えたコードの例があり、共有したい場合は、それが優れているでしょう。 注:ここでいくつかの良い情報を見つけましたが、探しているものはまだ見つかりません:http : //msdn.microsoft.com/en-us/magazine/ff714589.aspx
53 .net  logging 

9
TDDを行うときにロギングが必要ですか?
赤、緑、リファクタリングのサイクルを実行するときは、常にテストに合格するための最小限のコードを記述する必要があります。これは私がTDDについて教えられてきた方法であり、ほとんどすべての本がプロセスを説明する方法です。 しかし、ロギングはどうですか? 正直なところ、実際に複雑なことが起こっていない限り、アプリケーションでのログ記録はほとんど使用していませんが、適切なログ記録の重要性に関する多くの投稿を見てきました。 そのため、例外をログに記録する以外に、適切にテストされたアプリケーション(ユニット/統合/受け入れテスト)にログを記録することの本当の重要性を正当化できませんでした。 だから私の質問は: TDDを実行している場合、ログを記録する必要がありますか?テストに失敗しても、アプリケーションのどこが悪いのかわかりませんか? 各クラスの各メソッドにロギングプロセスのテストを追加する必要がありますか? たとえば、実稼働環境でいくつかのログレベルが無効になっている場合、テストと環境の間に依存関係が生じませんか? 人々はログがデバッグを容易にする方法について話しますが、TDDの主な利点の1つは、テストの失敗によって何が間違っているかを常に知っていることです。 私がそこに欠けているものはありますか?

6
グローバルに一意のメッセージIDを使用してコードを検索可能にする
バグを見つけるための一般的なパターンは、このスクリプトに従います。 たとえば、出力がない、プログラムがハングしているなど、奇妙な点を観察してください。 ログまたはプログラム出力で関連するメッセージを見つけます。たとえば、「Fooが見つかりませんでした」。(以下は、これがバグを見つけるためのパスである場合にのみ関連します。スタックトレースまたは他のデバッグ情報がすぐに利用できる場合は、別の話です。) メッセージが印刷されるコードを見つけます。 Fooが画像を最初に入力する(または入力する必要のある)場所と、メッセージが印刷される場所の間でコードをデバッグします。 この3番目のステップでは、コード内に「Coo not find Foo」(またはテンプレート化された文字列Could not find {name})が印刷される場所が多くあるため、デバッグプロセスが停止することがよくあります。実際、スペルミスが何度かあったとすると、実際の場所を見つけるのに非常に速くなりました。システム全体で、そして多くの場合世界中でメッセージが一意になり、関連する検索エンジンがすぐにヒットしました。 これから明らかな結論は、コード内でグローバルに一意のメッセージIDを使用し、メッセージ文字列の一部としてハードコーディングし、コードベース内に各IDが1つしか存在しないことを検証する必要があるということです。保守性の観点から、このコミュニティはこのアプローチの最も重要な長所と短所をどのように考えていますか?これをどのように実装するか、そうでなければ実装が必要にならないことを保証しますか?(ソフトウェアには常にバグがあると仮定して)

11
ロギング:なぜ、何ですか?[閉まっている]
ロギングを大幅に活用するプログラムを書いたことはありません。私がやったことのほとんどは、例外が発生したときにスタックトレースをキャプチャすることです。 他の人はどれくらいログを記録するのだろうかと思っていました 作成しているアプリケーションの種類に依存しますか?ログは実際に役立つと思いますか?

7
なぜ「オブジェクト参照がオブジェクトのインスタンスに設定されていない」とどのオブジェクトがわからないのですか?
私たちはシステムを立ち上げており、時々NullReferenceExceptionメッセージで有名な例外を受け取りますObject reference not set to an instance of an object。 しかし、ほぼ20個のオブジェクトがあるメソッドでは、オブジェクトがnullであると言うログを持つことは、まったく役に立ちません。あなたがセミナーの警備員であるとき、100人の出席者のうちの1人がテロリストであるとあなたに言うようなものです。それは本当にあなたにはまったく役に立ちません。どの男が脅迫的な男であるかを検出したい場合は、より多くの情報を取得する必要があります。 同様に、バグを削除する場合は、どのオブジェクトがnullであるかを知る必要があります。 今、何かが私の心を数ヶ月の間取りつづけています、そしてそれは: なぜ.NETから名前、または少なくともオブジェクト参照のタイプが提供されないのですか?。リフレクションまたは他のソースからタイプを理解できませんか? また、どのオブジェクトがnullであるかを理解するためのベストプラクティスは何ですか?これらのコンテキスト内のオブジェクトのNULL可能性を常に手動でテストし、結果をログに記録する必要がありますか?もっと良い方法はありますか? 更新: 例外The system cannot find the file specifiedは同じ性質を持っています。プロセスにアタッチしてデバッグするまで、どのファイルを見つけることができません。これらのタイプの例外はよりインテリジェントになる可能性があると思います。.NETがc:\temp.txt doesn't exist.その一般的なメッセージの代わりに私たちに伝えることができたらもっと良いと思いませんか?開発者として、私は賛成票を投じます。

2
ライブラリコードからログを記録する必要がありますか?
Javaライブラリを開発している場合、ライブラリのコード内からログステートメントを発行することをお勧めしますか? ライブラリ内にログを記録すると、デバッグとトラブルシューティングがより透過的になります。ただし、一方で、ロギングステートメントでライブラリコードを散らかすのは好きではありません。考慮すべきパフォーマンスへの影響もありますか?
38 java  logging 

4
Javaでデバッグ出力を処理する正しい方法は何ですか?
私の現在のJavaプロジェクトがますます大きくなるにつれて、コードのいくつかのポイントにデバッグ出力を挿入する必要性が同様に高まっていると感じています。 テストセッションの開始または終了に応じて、この機能を適切に有効または無効にするには、通常private static final boolean DEBUG = false、テストで検査するクラスの先頭にa を付け、この方法で(たとえば)簡単に使用します。 public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } など。 もちろん、それはうまくいきますが、数個を見つめていなければ、DEBUGをtrueに設定するクラスが多すぎる可能性があります。 逆に、出力されるテキストの量が圧倒的になる可能性があるため、私は(他の多くの人と同じように)アプリケーション全体をデバッグモードにすることを好みません。 だから、そのような状況をアーキテクチャ的に処理する正しい方法がありますか、最も正しい方法はDEBUGクラスメンバーを使用することですか?

4
テキストファイルまたはデータベースにログインしますか?
いつログにデータベースを使用し、テキストファイルを使用する必要がありますか? WebサーバーとWebフレームワーク(アプリが内部で使用するもの)は、通常(常に?)要求とエラーをデフォルトでテキストファイルに記録します。しかし、これらのサーバーやフレームワークを中心にアプリを開発する人々は、データベースにログインすることがあります(外部のアプリではなく、アプリのメインDBでも)。 また、デバッグログと監査ログには違いがあるかもしれません-私はこのサイトのどこかでこの分類を読みました。
25 logging 

2
JSONへのログインがパフォーマンスに与える影響
JSONでのロギングに関する記事が増えています。NodeJSブログでも見つけることができます。誰もがそんなに好きなのですか?より多くの操作が関与しているのを見ることができます: いくつかの新しいオブジェクトが作成されます。 オブジェクトの文字列化。文字列の長さを計算するか、複数の文字列を割り当てます。 作成されたすべてのがらくたをGCします。 JSONログと通常の文字列ログを使用するときのパフォーマンスのテストはありますか?人々はエンタープライズプロジェクトでJSON(ロギング用)を使用していますか?
22 logging  json 

7
本番環境でのユーザーアクションのログ記録のベストプラクティス
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 私は、ユーザーが次のような場合など、実稼働環境でさまざまなものをログに記録することを計画していました。 ログイン、ログオフ プロフィールを変更 アカウント設定を編集する パスワードを変更...など これは生産環境で行うのに良い習慣ですか?また、これをすべて記録する良い方法は何ですか。現在、次のコードブロックを使用してログに記録しています。 public void LogMessageToFile(string msg) { System.IO.StreamWriter sw = System.IO.File.AppendText( GetTempPath() + @"MyLogFile.txt"); try { string logLine = System.String.Format( "{0:G}: {1}.", System.DateTime.Now, msg); sw.WriteLine(logLine); } finally { sw.Close(); } } これは本番でも大丈夫ですか?私のアプリケーションは非常に新しいので、数百万人のユーザーがすぐに何も期待することはなく、ウェブサイトでのアクションを追跡するためのベストプラクティスを探しています。
21 c#  asp.net  logging 

6
実装の隣のロギングはSRP違反ですか?
アジャイルなソフトウェア開発とすべての原則(SRP、OCPなど)を考えるとき、ロギングをどのように扱うかを自問します。 実装の隣のロギングはSRP違反ですか? yes実装はロギングなしで実行することもできるはずだからです。それでは、より良い方法でロギングを実装するにはどうすればよいですか?いくつかのパターンを確認し、ユーザー定義の方法で原則に違反するのではなく、原則に違反することが知られているパターンを使用する最良の方法は、デコレータパターンを使用することであるという結論に達しました。 SRP違反のない完全に多数のコンポーネントがあり、ロギングを追加するとします。 コンポーネントA コンポーネントBはAを使用します Aのロギングが必要なので、Aで装飾された別のコンポーネントDを作成し、両方ともインターフェースIを実装します。 インターフェースI コンポーネントL(システムのロギングコンポーネント) コンポーネントAはIを実装します コンポーネントDはIを実装し、Aを装飾/使用し、ロギングにLを使用します コンポーネントBはIを使用します 利点:-ロギングなしでAを使用できます-Aをテストすると、ロギングモックが不要になります-テストが簡単になります 欠点:-より多くのコンポーネントとより多くのテスト これはもう1つの公開討論の質問のように思えますが、デコレータやSRP違反よりも優れたログ戦略を誰かが使用しているかどうかを実際に知りたいです。デフォルトのNullLoggerであり、syslogロギングが必要な場合、実行時に実装オブジェクトを変更する静的シングルトンロガーはどうでしょうか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.