研究をC++で実装していて、ログを出したい時にSpdlogを導入したのですが、変にハマってしまったのと、日本語の記事が少なかったので、簡単に残しておきます。
導入
導入方法はヘッダーのみインポートする方法(Header only version)とコンパイルして使う方法(Static lib version)があり、本家サイトでは後者が勧められていますが、今回は手っ取り早くログを出したいので、前者で導入します。
- GitHubからソースコードをダウンロードする
cloneしてもzipでDLしてもどちらでも大丈夫です。
-
include/spdlog
ディレクトリを任意の場所に配置
今回はプロジェクト配下にpackages
ディレクトリを作り、そこに配置します。ファイル構成は以下の通りです。
.
├── CMakeLists.txt
├── main.cpp
├── packages
│ └── spdlog
│ ├── async.h
│ ├── async_logger-inl.h
│ ├── async_logger.h
│ ├── common-inl.h
│ ├── common.h
: :
CMake
Spdlogをインクルードします。
CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(MyProject)
set(CMAKE_CXX_STANDARD 14)
include_directories("packages") # 上でspdlogを配置したディレクトリ
add_executable(
logTest
main.cpp
)
ログ出力
実際にログを出力してみます。(ログを出力するディレクトリを作ってYourLogDir
を置き換えてください。)
- ソースコード
main.cpp
int main() {
auto file_logger = spdlog::basic_logger_mt("basic_logger", "YourLogDir/basic.txt");
file_logger->info("hello!");
// デフォルトのLoggerに登録
spdlog::set_default_logger(file_logger);
spdlog::info("Some info Log here!!!");
}
- 実行 (私はIDEで実行してるので、雰囲気で書いてます🙇♂️)
$ cmake --build YourBuildDir --target logTest -- -j 2
$ YourBuildDir/logTest
ログ確認
basic.txt
[2019-12-26 16:55:14.916] [basic_logger] [info] hello!
[2019-12-26 16:55:14.917] [basic_logger] [info] Some info Log here!!!
最後に
今回は最低限のステップでログを出力しました。コンパイルに時間がかかってしまうので、余裕があったら最初に紹介したStatic lib version
で導入することをおすすめします。ログのローテートやフォーマットのカスタマイズの方法なども公式に書いてあるので、今後そちらもやっていきたいと思います。