10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++のLogger Spdlog

Posted at

研究を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で導入することをおすすめします。ログのローテートやフォーマットのカスタマイズの方法なども公式に書いてあるので、今後そちらもやっていきたいと思います。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?