Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@kozamurai

C++のLogger Spdlog

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?