| # Syslog | |
| This document explains how to get started with syslogger APIs. | |
| ### Component manifest dependency | |
| Ensure that your component has the required capabilities to log by including the | |
| following in your component manifest: | |
| ```json5 | |
| { | |
| include: [ | |
| "syslog/client.shard.cml" | |
| ], | |
| ... | |
| } | |
| ``` | |
| The syslog library will fallback to `stderr` if the `LogSink` connection fails. | |
| ## 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 | |
| ```gn | |
| //zircon/public/lib/syslog | |
| ``` | |
| ### Log messages | |
| ```C | |
| 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 | |
| ```C | |
| #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); | |
| } | |
| ``` | |
| ### Reference | |
| [C APIs](/zircon/system/ulib/syslog/include/lib/syslog/global.h) | |
| ## In C++ | |
| ### BUILD.gn dependency | |
| ```gn | |
| //sdk/lib/syslog/cpp | |
| ``` | |
| ### Log messages | |
| ```C++ | |
| #include <lib/syslog/cpp/macros.h> | |
| 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 `fuchsia_logging::SetTags`. | |
| ```C++ | |
| #include <lib/syslog/cpp/log_settings.h> | |
| int main(int argc, char** argv) { | |
| fuchsia_logging::SetTags({"tag1", "tag2"}); | |
| } | |
| ``` | |
| ### Set settings | |
| ```C++ | |
| #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"}); | |
| } | |
| ``` | |
| ### Set settings from command line | |
| ```C++ | |
| #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: | |
| ```gn | |
| //src/lib/fxl/test:gtest_main | |
| ``` | |
| ### Reference | |
| [C++ APIs](/sdk/lib/syslog/cpp/macros.h) | |
| <br/> | |
| [Command line initialization API](/src/lib/fxl/log_settings_command_line.h) |