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

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

5
データベーステーブルはいつタイムスタンプを使用する必要がありますか?
まず、この質問はデータベース交換に属していると思いましたが、データベースよりもプログラミングソリューション全体に関連していると思います。人々がそれを最高だと思うなら、データベース交換に移行します。 データベーステーブルに作成および更新されたタイムスタンプをいつ追加する必要があるのか​​疑問に思いましたか? 最初の明らかな答えは、何かが更新されたとき(トランザクション完了日など)をビジネスロジックが知る必要がある場合、それを入力する必要があるということです。 しかし、非ビジネスロジックの場合はどうでしょうか。たとえば、いくつかのビジネスロジックが失敗し、関連するデータベースの行を確認して、1つの行が更新される前に識別することができるなど、障害の検出に役立つように行が変更された日時を知ることが本当に役立つシナリオを考えることができますエラーの原因となっている別の行。 このユースケースでは、すべてのテーブルに更新を与えてタイムスタンプを作成することは理にかなっています(アプリケーションのどの部分によっても更新されない最も単純な列挙テーブルを除く)。 すべてのテーブルにタイムスタンプを与えることは、間違いなくデータベースをすぐに停止させる素晴らしい方法です。 それでは、データベーステーブルはいつタイムスタンプの作成と更新を使用すべきですか?

6
試行/キャッチ/ログ/再スロー-アンチパターンはありますか?
try / catchの周りにすべてのコードブロックを散らかすのではなく、中央の場所またはプロセスの境界で例外を処理することの重要性が良いプラクティスとして強調されているいくつかの投稿を見ることができます。私たちのほとんどはそれの重要性を理解していると強く信じていますが、主に例外中のトラブルシューティングを容易にするために、より多くのコンテキスト固有の情報(例:メソッドパラメータ合格)、方法はtry / catch / log / rethrowの周りにメソッドをラップすることです。 public static bool DoOperation(int num1, int num2) { try { /* do some work with num1 and num2 */ } catch (Exception ex) { logger.log("error occured while number 1 = {num1} and number 2 = {num2}"); throw; } } 例外処理の優れた実践を維持しながら、これを達成する正しい方法はありますか?このためにPostSharpのようなAOPフレームワークについて聞いたことがありますが、これらのAOPフレームワークに関連するマイナスまたは主要なパフォーマンスコストがあるかどうかを知りたいです。 ありがとう!

8
例外をスローするコンストラクターでエラーを記録する必要がありますか?
私は数か月間アプリケーションを構築していましたが、次のようなパターンが明らかになりました。 logger.error(ERROR_MSG); throw new Exception(ERROR_MSG); または、キャッチする場合: try { // ...block that can throw something } catch (Exception e) { logger.error(ERROR_MSG, e); throw new MyException(ERROR_MSG, e); } したがって、例外をスローまたはキャッチするたびに、ログに記録します。実際、それはアプリケーションで行ったほとんどすべてのロギングでした(アプリケーションの初期化のための何かに加えて)。 それで、プログラマーとして、私は繰り返しを避けます。そこで、ロガー呼び出しを例外構築に移動することにしました。そのため、例外を構築するたびに、ログが記録されます。確かに、私のために例外をスローするExceptionHelperを作成することもできますが、それはコードの解釈を難しくし、さらに悪いことに、コンパイラはそれをうまく処理できず、そのメンバーへの呼び出しがすぐに投げます。 それで、これはアンチパターンですか?もしそうなら、なぜですか?

2
キャッチオールまたは基本例外クラスで例外を記録する方が賢明ですか?
私はかなり大きなWebアプリをリファクタリングしています。主な問題の1つは、一貫性のないエラー処理であり、私は賢明な戦略を考え出そうとしています。set_error_handlerを介して、基本的にErrorExceptionsの PHPエラーを変換するカスタムエラーハンドラーと、Exceptionから直接継承するカスタムベース例外クラスを作成しました。 実稼働環境では、set_exception_handlerを介して汎用の例外catch-allを使用しており、例外ログ*をミックスに追加しようとしています。私のジレンマは、基本例外クラスまたはキャッチオールで実際のロギングを行う場所です。 私はそれをキャッチオールに記録するいくつかの理由を考えました: 基本例外クラスの適切な子に変換する必要があるコードには、かなりの数の例外があります。それが起こるまで、すべての例外がログに記録されるわけではありません。 キャッチオールでそれを行う方が自然な感じがします。ベース例外クラスはそれ以上のことをすべきではありません。(それは単一の責任原則のことかもしれませんが、見当違いの感覚かもしれません) 基本例外クラスにログインする1つの理由: 現在、キャッチオールは本番環境でのみ使用されています。他の環境(開発、テスト)で導入するのは簡単ですが、エラーは環境ごとに処理が異なるため、本番環境では404/503エラーページに変換されるため、いくつかの調整が必要になります。 例外をログに記録する場所について、受け入れられるプラクティスはありますか? *ロギングには最初はテキストファイルへの書き込みが含まれますが、特定の種類の例外のメールを送信するように進化する場合があります。 @unholysamplerの答えに促されたいくつかの説明: 私は2 * 10 ^ 6のslocコードベースに直面しており、多くのサードパーティのものを制御できません。また、PHPの前日例外を制御するコードの一部もあります。また、最近のくだらないコードもいくつかあります。私たちは、思考をやめ、ハッキングされなければならなかった激しいプレッシャーから長期間回復しています。 すべての矛盾に対処し、適切なエラー処理アプローチを導入するために積極的にリファクタリングを行っていますが、それには時間がかかります。エラーが適切に処理されるようになるまで、どうすればいいのか興味があります。おそらく、ある時点で賢明な例外戦略について別の質問をするでしょう。 ロギングの背後にある主な動機は、本番環境で何か悪いことが起こったときに電話でメールを受け取ることです。データダンプが巨大になるかどうかは気にしません。データダンプが大きくなると、古いジョブを時々削除するcronジョブが必要になります。

3
アプリケーション全体で静的ロギングメソッドを使用する代わりにLoggerオブジェクトを作成する理由
単純なRuby on Railsアプリケーションの例を取り上げます。Loggerアプリケーションのロードプロセス中にオブジェクトを作成します。 # in environment.rb config.logger = Logger.new(<STDOUT | file | whatever>) # and in our application we use this object logger.warn "This process is taking too long to process. Optimization needed." 私の質問は、なぜロギングにクラスメソッド(または静的メソッド)を使用しないのですか?Logger.warnよりもスケーリングしませんLogger.new.warnか?または、少なくともLogger.warnより直感的ですLogger.new.warn。 Logger.newシングルトンオブジェクトであっても、どのような利点がありますか?

6
例外のエラーログを管理する最良の方法は何ですか?
前書き ウェブサイトまたはシステムでエラーが発生した場合は、ログに記録し、エラーの参照コードを含む丁寧なメッセージをユーザーに表示することはもちろん役立ちます。 また、システムがたくさんある場合は、この情報を点在させたくはありません-単一の集中化された場所を用意しておくとよいでしょう。 最も単純なレベルでは、必要なのは、増分IDとエラーの詳細のシリアル化されたダンプだけです。(そして、おそらく「集中化された場所」は電子メールの受信トレイです。) スペクトルのもう一方の端には、おそらく完全に正規化されたデータベースがあり、ボタンを押して1日あたりのエラーのグラフを表示したり、システムXで最も一般的なタイプのエラーを特定したりできます。サーバーBよりも接続エラーなど。 ここで言及しているのは、リモートシステムによるコードレベルのエラー/例外のログです。Jira、Tracなどで行われるような「人間ベース」の問題追跡ではありません。 ご質問 このタイプのシステムを使用した開発者から、特に次の点についての考えを探しています。 欠かせない基本的な機能は何ですか? 本当に時間を節約する機能があると便利ですか? どの機能が良いアイデアに思えるかもしれませんが、実際にはそれほど便利ではありませんか? たとえば、エラーの複数の発生を識別する「重複の表示」機能(「重要でない」詳細が異なることを心配せずに)は非常に重要です。 [このエラーに対して[Jira / etc]で問題を作成する]ボタンは、時間の節約になります。 繰り返しになりますが、私が望んでいるのは、そのようなシステムを使用した人々からの実践的な経験であり、できれば機能が素晴らしい/ひどい理由を裏付けています。 (とにかく理論化するつもりなら、少なくともそのようなものとしてあなたの答えをマークしてください。)

5
例外処理、ロギングをいつ書き始めるか
例外処理コードの記述をいつ開始しますか?いつログ文を書き始めますか。 この質問を詳しく説明するために、log4netロギングを備えた.NETプラットフォームを使用していると仮定しますが、一般的な方法で自由に回答してください。 解決策:Windowsフォームプロジェクト。プロジェクト:UI、BusinessRules、DataHandlers だから、作成、読み取り、更新、削除などのデータ操作を最初に行うDataHandlersを書くことに取り掛かりますか? 次に、ビジネスルールでフォローアップします そして、UIまたは上記の他の組み合わせ。 アプリケーションの機能をテストします。 そして、例外処理コードの作成を開始し、最後にロギングコードを作成しますか? 例外処理コードの記述を開始する適切なタイミングはいつですか? PS:本Clean Codeの中で、彼らは最初にtry-catch-finallyブロックを書くと言っています。それで、この質問をすることになりました。

6
ロギングのルールとアドバイス?
私の組織では、ロギングに関するいくつかのルール/ギルドラインをまとめました。これについて、追加またはコメントできるかどうかを知りたいと思います。 私たちはJavaを使用していますが、一般的にlogginについてコメントすることができます-ルールとアドバイス 正しいログレベルを使用する エラー:何かが非常に間違っているため、すぐに修正する必要があります 警告:プロセスは修正せずに続行できます。アプリケーションはこのレベルを許容する必要がありますが、警告は常に調査する必要があります。 情報:重要なプロセスが終了したという情報 デバッグ。開発時にのみ使用されます 何をログに記録しているかを確認してください。 ロギングがアプリケーションの動作に影響を与えないようにします ロギングの機能は、ログにメッセージを書き込むことです。 ログメッセージは、説明的で、明確で、短く、簡潔でなければなりません。 トラブルシューティングの際にナンセンスなメッセージはあまり使用されません。 log4jに適切なプロパティを配置する 適切なメソッドとクラスが自動的に記述されることを入れてください。 例: Datedfile -web log4j.rootLogger=ERROR, DATEDFILE log4j.logger.org.springframework=INFO log4j.logger.waffle=ERROR log4j.logger.se.prv=INFO log4j.logger.se.prv.common.mvc=INFO log4j.logger.se.prv.omklassning=DEBUG log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n log4j.appender.DATEDFILE.Prefix=omklassning. log4j.appender.DATEDFILE.Suffix=.log log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/ ログ値。 アプリケーションから値を記録してください。 ログプレフィックス。 アプリケーションのどの部分からロギングが書き込まれるかを、できればプロジェクトで合意された接頭辞などを使用して記述してください。 PANDORA_DB テキストの量。 ロギングテキストが多くなりすぎないように注意してください。アプリのパフォーマンスに影響を与える可能性があります。 ロギング形式: -log4jで使用するいくつかのバリアントとメソッドがありますが、例外をログに記録する場合は、次の形式を統一して使用したいと思います。 logger.error("PANDORA_DB2: Fel vid hämtning av frist i …
13 java  logging 

2
Logger.getLogger(MyClass.class)は、log4jロガーを初期化する最良の方法ですか?
このMkyongチュートリアルでは、ロガーを次のように初期化することを提案しています。 @Controller public class WelcomeController { private static final Logger logger = Logger.getLogger(WelcomeController.class); // etc } 今、おそらくあなたが使用する他のすべてのクラスには、ロガーがあり、同じようにロガーを初期化します。 私の質問は-これはそれを行うための最良の方法ですか?それは...繰り返しのようです。
13 java  logging 

1
ファイルまたはデータベーステーブルにログを記録しますか?
ユーザー、ユーザーアカウント、ユーザーライセンス、ライセンス価格、請求書など、さまざまなデータにMS SQLを使用するWebアプリケーションを開発しています。 ユーザーのシステムのリアルタイム使用状況をログに記録し、毎月の請求に使用する必要があります。たとえば、ユーザーが特定のページ/ URLを取得するたびにログを記録し、取得したページ数に基づいて月末にユーザーに請求します。 これらのログイベントをMS SQLデータベースのテーブルに書き込む必要がありますか? これらのログイベントをSQL以外の追加専用ログファイルに書き込む必要がありますか? これらのログイベントをユーザーごとに異なるログファイルに書き込む必要がありますか? これは特に大規模なWebサイトではありません。たとえば、最大10,000ユーザーが1日あたり平均5つのログ記録可能なイベントを行う=> 50,000イベント/日= 30イベント/分= 18,000,000イベント/年。 どちらかのオプションが実行可能と思われ、明確な利点があるかどうかわからないので、私は尋ねています。 請求可能なイベントに関連付けられたデータは単純です。たとえば、次のとおりです。 ユーザーID(SQLのユーザーテーブルとの外部キー関係) 日時 請求可能なページのURL この質問に対する私自身の答えは次のとおりです。 データベーステーブルにログを書き込むことの利点: 関係の整合性:たとえば、ログに記録されたイベントは有効なユーザーIDに関連付けられます(ユーザーIDをテーブル間の外部キーとして定義することにより) 課金のために読みやすい:例えばSELECT COUNT GROUP BY、ユーザーごとのログイベントの数のカウントを取得する ログファイルへの書き込みのいくつかの利点: より簡単なパフォーマンス:SQLはあまり頻繁に使用されません。たとえば、ユーザーのログインイベントにのみ使用され、ほとんどが読み取りにのみ使用されます 管理の簡素化:データベースから削除/アーカイブする代わりに古いログファイルを移動することにより、年末などに古いデータを簡単にアーカイブできます 答えが間違っている場合はお知らせください。または何かの重要性を誇張します。またはいくつかの重要な考慮事項を忘れています。 そして/またはそれが私の答えと異なる場合、あなたの答えが何であるかを教えてください。

2
ロガーの障害をどのように処理すればよいですか?
当社のアプリケーションのいくつかでは、カスタムロガーを使用しています。かなり堅牢ですが、将来NLogのようなものに置き換える可能性があります。ロガーのタスクの1つは、アプリケーションで発生した例外をログに記録することです。 私が常に抱えていた懸念の1つは、ロガー内の例外処理がサイレント障害を許容することです。つまり、ログが特定の例外(ロガーのエラーのため)に書き込まれていない場合、どのようにログを処理し、(どういうわけか)ロガー自体に例外を記録する必要がありますか? WriteLog関数が例外をスローするとします。関数を何回か、または例外がスローされなくなるまで呼び出そうとしますか?スローされた例外をロガーで書き込もうとする必要があります(これにより、例外が発生する可能性が高くなります。最初にカスタムロガーを実装していたときを除いて、この状況に出会えないほど幸運でした。一方で、ロガーがアプリケーションの例外(独自の例外のため)のログに失敗したかどうかを現時点で知る方法はありません。 私はオンラインといくつかのSEサイトで検索しようとしましたが、すべての投稿がロガーのエラー(潜在的な例外とそれらのログ方法ではありません)またはロガー外の例外を扱っているため、これまでのところ無駄です。

8
ビジネスロジックの外でコードのログを完全に記録し続けることは可能ですか?
AOPを利用して、ビジネスロジックからロギングコードを削除できます。しかし、それは単純なもの(つまり、メソッドの入り口/出口およびパラメーター値のロギング)をログに記録するためにのみ使用できると思います。 ただし、ビジネスロジックに何かを記録する必要がある場合はどうなりますか?例えば public void SomeDomainMethod(string id) { //Get user by Id User user = Users.Get(id); if (user == null) { Log.Warn("user is not existed"); //<----------------- Log A throw new InvalidOperationException("user is not existed"); } //Step 1 while(true) { //do something } Log.Info("Step 1 is completed"); //<----------------- Log B //Step 2 …

6
私のコードをチーム内の他のプログラマーにとって読みやすくする必要がある
私はデルファイでプロジェクトを進めており、アプリケーションのインストーラーを作成しています。主に3つの部分があります。 PostgreSQLのインストール/アンインストール myapplication(myapplicationのセットアップはnsiを使用して作成されます)インストール/アンインストール。 スクリプト(バッチファイル)を使用してPostgresでテーブルを作成します。 すべてがうまくスムーズに実行されますが、何かが失敗した場合は、 このようにプロセスのすべてのステップをLogToFileするLogToFilegerを作成しました LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); 関数LogToFileToFile.LogToFile()これは、内容をファイルに書き込みます。これはうまく機能していますが、問題は、コードのどこでも関数呼び出しを見るだけでコードを読むことが難しくなっているため、コードが台無しになっていることLogToFileToFile.LogToFile()です 例 if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ Failed'); end; if Not FileExists(SystemDrive+'\SecondFileName.txt') then begin if CopyFile(PChar(FilePathBase+'SecondFileName.txt'), PChar('c:\SecondFileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] …

7
設計の観点から、ロギングのベストプラクティスは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 現在作業中のアプリケーションにロギングを追加したい。以前にロギングを追加しましたが、ここでは問題ではありません。 しかし、オブジェクト指向言語の設計の観点から、OOPとパターンに従うロギングのベストプラクティスは何ですか? 注:私は現在C#でこれを行っているので、C#の例は明らかに歓迎されています。また、JavaとRubyの例をご覧ください。 編集:私はlog4netを使用しています。プラグインするのに最適な方法がわからないだけです。

4
非同期のロギング-どのように実行する必要がありますか?
私が取り組んでいるサービスの多くでは、多くのロギングが行われています。サービスは、.NET EventLoggerクラスを使用する(主に)WCFサービスです。 私はこれらのサービスのパフォーマンスを改善している最中です。非同期にログを記録するとパフォーマンスが向上すると思います。 複数のスレッドがログを要求したときに何が起こるか、そしてそれがボトルネックを作成するかどうかはわかりませんが、それが実行されない場合でも、実行されている実際のプロセスに干渉しないはずです。 私が思っているのは、今呼び出す同じログメソッドを呼び出す必要があるということですが、実際のプロセスを続行しながら、新しいスレッドを使用して呼び出します。 それに関するいくつかの質問: 大丈夫ですか? 欠点はありますか? 別の方法で行う必要がありますか? 多分それはあまりにも速くて、努力する価値すらありませんか?
11 logging 

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