Tutorial
3.3. ロガー

3.3. ロガー

概要

  • プログラムの実行ログを取る方法を学ぼう
    • 本ライブラリを用いると,簡単にシリアルモニタへの出力と SD カードへの保存ができる
  • このようなログを記録する機能をロガー(Logger)と呼ぶ

使い方

  • 初期化
    • logger.enableComputer() : PC のシリアルモニタへの出力を有効化
      • PC に接続している場合のみ有効化する
      • この中で Computer::init が実行されている(参照
    • logger.enableSDCard(file_name) : SD カードへの出力を有効化
      • file_name : ログを保存するファイル名
      • SD カードを使う場合のみ有効化する
      • この中で SDCard::init が実行されている(参照
    • logger.setDebug() : デバッグ出力を有効化
      • 有効化した場合のみ logger.debug が出力される
  • 記録
    • logger.info(message, ...) : 通常のメッセージ
    • logger.error(message, ...) : エラーメッセージ
    • logger.warning(message, ...) : ワーニングメッセージ
    • logger.debug(message, ...) : デバッグメッセージ
      • logger.setDebug で有効化した場合のみ出力される
    • これらは,シリアルモニタと SD カードそれぞれが有効化されている場合に出力される
      • 両方が有効化されている場合は両方に記録される
    • print と同様,引数は何個でも指定できる

ソースコード

tutorial_logger.ino
#include <CanSatSchool.h>
 
// SDカードの SS ピンを指定する場合
// デフォルトで10に設定されているため,変更する場合のみ記述すればよい
// #define PIN_SD_SS 9
 
void setup()
{
    // ロガーを初期化
 
    // パソコンへの出力を有効化する(パソコンを使わない場合は不要)
    logger.enableComputer();
 
    // SDカードへのログ記録を有効化する(SDカードを使わない場合は不要)
    String file_name = "log.txt";  // 記録するファイル名
    logger.enableSDCard(file_name);
    // logger.enableSDCard(file_name, PIN_SD_SS);  // SDカードの SS ピンを指定する場合
 
    // デバッグ出力を有効化したい場合
    // logger.setDebug();
 
    delay(500);
}
 
void loop()
{
    // 通常のメッセージ
    logger.info(F("Hello, World!"));
 
    delay(1000);
 
    // エラーメッセージ
    logger.error(F("This is an error message."));
 
    delay(1000);
 
    // ワーニングメッセージ
    logger.warning(F("This is a warning message."));
 
    delay(1000);
 
    // デバッグメッセージ
    // 有効化した場合のみ出力される
    logger.debug(F("This is a debug message."));
 
    delay(1000);
 
    // メッセージに数値を含める
    logger.info(F("This is a message with a number:"), 123);
 
    delay(1000);
 
    // 変数を用いる
    int value = 456;
    String message = F("This is a message with a variable:");
    logger.info(message, value);
 
    delay(1000);
 
    float pi = 3.14;
    logger.info(F("pi ="), pi, F("..."));
 
    delay(1000);
 
    logger.info(F("End of program."));
    while (true) {
        // プログラム終了
    }
}
 

GitHub (opens in a new tab)

出力例

上のプログラムを SDカードを差し込まずに 実行した結果,以下のような出力が得られる

   1.00 [INFO] [Computer] Initialized
   1.00 [INFO] [Logger] Start logging to computer
   1.03 [INFO] [SDCard] Initializing...
   3.17 [ERROR] [SDCard] Failed to initialize
   3.17 [WARNING] [Logger] Logging to SD card is disabled
   3.71 [INFO] Hello, World!
   4.71 [ERROR] This is an error message.
   5.71 [WARNING] This is a warning message.
   7.71 [INFO] This is a message with a number: 123
   8.71 [INFO] This is a message with a variable: 456
   9.72 [INFO] pi = 3.14 ...
  10.72 [INFO] End of program.

また,デバッグ出力を有効化した場合,以下のような出力が得られる

   1.00 [INFO] [Computer] Initialized
   1.00 [INFO] [Logger] Start logging to computer
   1.03 [INFO] [SDCard] Initializing...
   3.17 [ERROR] [SDCard] Failed to initialize
   3.17 [WARNING] [Logger] Logging to SD card is disabled
   3.21 [INFO] [Logger] Debug mode is enabled.
   3.76 [INFO] Hello, World!
   4.76 [ERROR] This is an error message.
   5.76 [WARNING] This is a warning message.
   6.76 [DEBUG] This is a debug message.
   7.76 [INFO] This is a message with a number: 123
   8.76 [INFO] This is a message with a variable: 456
   9.77 [INFO] pi = 3.14 ...
  10.77 [INFO] End of program.