// Copyright Epic Games, Inc. All Rights Reserved. #include "zenutil/config/loggingconfig.h" #include #include #include ZEN_THIRD_PARTY_INCLUDES_START #include ZEN_THIRD_PARTY_INCLUDES_END namespace zen { void ZenLoggingCmdLineOptions::AddCliOptions(cxxopts::Options& options, ZenLoggingConfig& LoggingConfig) { // clang-format off options.add_options("logging") ("abslog", "Path to log file", cxxopts::value(m_AbsLogFile)) ("log-id", "Specify id for adding context to log output", cxxopts::value(LoggingConfig.LogId)) ("quiet", "Configure console logger output to level WARN", cxxopts::value(LoggingConfig.QuietConsole)->default_value("false")) ("noconsole", "Disable console logging", cxxopts::value(LoggingConfig.NoConsoleOutput)->default_value("false")) ("log-trace", "Change selected loggers to level TRACE", cxxopts::value(LoggingConfig.Loggers[logging::level::Trace])) ("log-debug", "Change selected loggers to level DEBUG", cxxopts::value(LoggingConfig.Loggers[logging::level::Debug])) ("log-info", "Change selected loggers to level INFO", cxxopts::value(LoggingConfig.Loggers[logging::level::Info])) ("log-warn", "Change selected loggers to level WARN", cxxopts::value(LoggingConfig.Loggers[logging::level::Warn])) ("log-error", "Change selected loggers to level ERROR", cxxopts::value(LoggingConfig.Loggers[logging::level::Err])) ("log-critical", "Change selected loggers to level CRITICAL", cxxopts::value(LoggingConfig.Loggers[logging::level::Critical])) ("log-off", "Change selected loggers to level OFF", cxxopts::value(LoggingConfig.Loggers[logging::level::Off])) ("otlp-endpoint", "OpenTelemetry endpoint URI (e.g http://localhost:4318)", cxxopts::value(LoggingConfig.OtelEndpointUri)) ; // clang-format on } void ZenLoggingCmdLineOptions::ApplyOptions(ZenLoggingConfig& LoggingConfig) { LoggingConfig.AbsLogFile = MakeSafeAbsolutePath(m_AbsLogFile); } void ApplyLoggingOptions(cxxopts::Options& options, ZenLoggingConfig& LoggingConfig) { ZEN_UNUSED(options); if (LoggingConfig.QuietConsole) { bool HasExplicitConsoleLevel = false; for (int i = 0; i < logging::level::LogLevelCount; ++i) { if (LoggingConfig.Loggers[i].find("console") != std::string::npos) { HasExplicitConsoleLevel = true; break; } } if (!HasExplicitConsoleLevel) { std::string& WarnLoggers = LoggingConfig.Loggers[logging::level::Warn]; if (!WarnLoggers.empty()) { WarnLoggers += ","; } WarnLoggers += "console"; } } for (int i = 0; i < logging::level::LogLevelCount; ++i) { logging::ConfigureLogLevels(logging::level::LogLevel(i), LoggingConfig.Loggers[i]); } logging::RefreshLogLevels(); } } // namespace zen