Google is committed to advancing racial equity for Black communities. See how.

Syslog

This document explains how to get started with syslogger APIs.

Component manifest

The fuchsia.logger.LogSink capability must be exposed to the component that uses the syslog API.

{
    "sandbox": {
        "services": [
            "fuchsia.logger.LogSink"
        ]
    }
}

Default configuration

The global logger is lazily instantiated on the first use of the API (more specifically, on the first call to fx_log_get_logger). The default configuration for the global logger is:

  • Use process name as the tag
  • Write logs to fuchsia.logger.LogSink
  • Min log level of FX_LOG_INFO

In C

BUILD.gn dependency

//zircon/public/lib/syslog

Log messages

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

Using non-default configuration

#include <lib/syslog/global.h>

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

Reference

C APIs

In C++

BUILD.gn dependency

//sdk/lib/syslog/cpp
//sdk/lib/syslog/cpp:backend_legacy

Log messages

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

Set tags

By default, the process name is used as the tag, but this can be changed by calling syslog::SetTags.

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

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

Set settings

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

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

Set settings from command line

#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"});
}

GTest main with syslog initialized from command line

No initialization is required for using the default configuration of syslog. If you would like your test suite to change the configuration based on command line arguments (e.g. --verbose), use:

//src/lib/fxl/test:gtest_main

Reference

C++ APIs
Command line initialization API