C++:
ロギング
どのようにして:
例えば、Linux環境で作業していて、良い古いC++を使ってログをファイルに入れたいとしましょう。ファイル操作をするために、<iostream>
と<fstream>
ライブラリを含める必要があります。こちらが簡単な例です:
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ofstream logFile("appLog.txt", std::ios::app); // 追記モードで開く
if (!logFile.is_open()) {
std::cerr << "ログファイルを開く際に問題が発生しました!" << std::endl;
return 1;
}
logFile << "アプリケーションが開始されました" << std::endl;
// ... あなたのアプリのロジックのどこかで
logFile << "重要なイベントが発生しました" << std::endl;
// ファイルストリームを閉じるのを忘れないでください
logFile.close();
return 0;
}
tail -f appLog.txt
を使ってログファイルを追いかけると、次のように表示されるはずです:
アプリケーションが開始されました
重要なイベントが発生しました
素晴らしい、イベントのタイムスタンプ付きレコードが得られました!
深掘り
ログはコンピューティング自体と同じく古く、古代のコンピューターが何をしていたのかを追跡するために紙に文字通りマークをつけることから始まりました。現代においては、洗練されたソフトウェアソリューションについてすべてです。先に示したような、ファイルへ直接のログ、またはLog4cppやC++のBoost.Logのようなよりファンシーなログフレームワークに耽ることもできます。これらのフレームワークは、ログレベル、フォーマット制御などを提供しています。
レベルについて言えば、ログの最良の慣行には、情報、デバッグ、警告、エラー、致命的などの様々な重大度のレベルを使用することが含まれています。これにより、バグを潰したり、アプリの気まぐれな振る舞いの原因を解明しようとしている時に雑音をフィルタリングできます。
パフォーマンスに関しては、ログを怠ることなく行ってください。過度のログは、あなたの超高速アプリを遅いカタツムリマラソンに変えたり、ファイルシステムを停滞させたり、クラウドベースの場合はストレージ料金が発生する場合があります。必要なものを記録し、それ以外は記録しないことがキーです。
関連情報
ログ慣行に関してさらに一歩踏み込みたい方々は、以下をチェックしてください:
- 重厚なログ機能を持つBoost.Logライブラリ。
- テックジャイアントが自社アプリをログするために使用しているものに興味があるなら、Googleのglogライブラリを。
- 設定可能なログメカニズムを備えたLog4cppライブラリ。
また、ログの理由と方法についてのバックグラウンド読書として、下記を参照してください:
- ログの最良の慣行に関するこのStack Overflowスレッドは、この主題について同僚からの批評を受けた深い洞察を提供します。