系統記錄檔

本文說明如何開始使用 syslogger API。

元件資訊清單依附元件

在元件資訊清單中加入以下內容,確保元件具有可記錄的必要功能:

{
  include: [
    "syslog/client.shard.cml"
  ],
  ...
}

如果 LogSink 連線失敗,系統記錄檔程式庫將恢復為 stderr

預設設定

全域記錄器會在第一次使用 API 時延遲例項化 (更具體來說,是第一次呼叫 fx_log_get_logger 時)。全域記錄器的預設設定為:

  • 使用程序名稱做為標記
  • 將記錄寫入 fuchsia.logger.LogSink
  • 最低記錄檔層級:FX_LOG_INFO

在 C 中

BUILD.gn 依附元件

//zircon/public/lib/syslog

記錄訊息

FX_LOGF(INFO, "tag", "my msg: %d", 10);
FX_LOG(INFO, "tag", "my msg");
FX_LOGF(INFO, NULL, "my msg: %d", 10);

使用非預設設定

#include <lib/syslog/global.h>

int main(int argc, char** argv) {
    fx_logger_config_t config = {
      .min_severity = FX_LOG_INFO,
      .tags = (const char * []) {"gtag", "gtag2"},
      .num_tags = 2,
    };
    fx_log_reconfigure(&config);
}

參考資料

C API

在 C++ 中

BUILD.gn 依附元件

//sdk/lib/syslog/cpp

記錄訊息

#include <lib/syslog/cpp/macros.h>

FX_LOGS(INFO) << "my message";
FX_LOGST(INFO, "tag") << "my message";

設定標記

根據預設,系統會將程序名稱做為標記使用,但呼叫 fuchsia_logging::SetTags 即可變更。

#include <lib/syslog/cpp/log_settings.h>

int main(int argc, char** argv) {
     fuchsia_logging::SetTags({"tag1", "tag2"});
}

進行設定

#include "<lib/syslog/cpp/log_settings.h>

int main(int argc, char** argv) {
     fuchsia_logging::LogSettings settings = {
         .min_log_level = fuchsia_logging::LOG_ERROR,
     };
     fuchsia_logging::SetLogSettings(settings, {"tag1", "tag2"});
}

透過指令列進行設定

#include "src/lib/fxl/command_line.h"
#include "src/lib/fxl/log_settings_command_line.h"

int main(int argc, char** argv) {
    auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
    fxl::SetLogSettingsFromCommandLine(command_line, {"my_program"});
}

透過指令列初始化的 syslog 的 GTest 主節點

使用 Syslog 的預設設定時不需要初始化。如果想讓測試套件根據指令列引數 (例如 --verbose) 變更設定,請使用:

//src/lib/fxl/test:gtest_main

參考資料

C++ API
指令列初始化 API