This document explains how to get started with syslogger APIs.
Ensure that your component has the required capabilities to log by including the following in your component manifest:
- {.cmx}
{
"include": [
"syslog/client.shard.cmx"
],
...
}
- {.cml}
{
include: [
"syslog/client.shard.cml"
],
...
}
The syslog library will fallback to stderr
if the LogSink
connection fails.
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
//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,
.console_fd = -1,
.tags = (const char * []) {"gtag", "gtag2"},
.num_tags = 2,
};
fx_log_reconfigure(&config);
}
//sdk/lib/syslog/cpp
#include <lib/syslog/cpp/macros.h>
FX_LOGS(INFO) << "my message";
FX_LOGST(INFO, "tag") << "my message";
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"});
}
#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"});
}
#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"});
}
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