Help us understand the problem. What is going on with this article?

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

kozamurai
筑波大学大学院 M2 コンピュータサイエンスを学んでいます。
https://www.wantedly.com/users/67711331
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした