Syslog

本文档介绍如何开始使用 Syslogger API。

组件清单依赖项

通过在组件清单中添加以下代码,确保您的组件具有记录所需的功能:

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

如果 LogSink 连接失败,syslog 库将回退到 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