| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| */ | |
| #pragma once | |
| /// \file iceberg/logging/log_level.h | |
| /// \brief Severity levels for the logging system. | |
| #include <string_view> | |
| #include <utility> | |
| #include "iceberg/compat/unreachable.h" | |
| #include "iceberg/result.h" | |
| #include "iceberg/util/string_util.h" | |
| namespace iceberg { | |
| /// \brief Logging severity level, ordered from most to least verbose. | |
| /// | |
| /// Levels are ordered so that `level >= threshold` is the enabled test. | |
| /// `kOff` is the maximum sentinel: as a threshold it disables all emission | |
| /// (it is never the level of an actual message). | |
| enum class LogLevel { | |
| kTrace, | |
| kDebug, | |
| kInfo, | |
| kWarn, | |
| kError, | |
| kCritical, | |
| kFatal, | |
| kOff, | |
| }; | |
| /// \brief String representation of a LogLevel. | |
| constexpr std::string_view ToString(LogLevel level) noexcept { | |
| switch (level) { | |
| case LogLevel::kTrace: | |
| return "trace"; | |
| case LogLevel::kDebug: | |
| return "debug"; | |
| case LogLevel::kInfo: | |
| return "info"; | |
| case LogLevel::kWarn: | |
| return "warn"; | |
| case LogLevel::kError: | |
| return "error"; | |
| case LogLevel::kCritical: | |
| return "critical"; | |
| case LogLevel::kFatal: | |
| return "fatal"; | |
| case LogLevel::kOff: | |
| return "off"; | |
| } | |
| ::iceberg::unreachable(); | |
| } | |
| /// \brief Parse a LogLevel from a string (case-insensitive). | |
| /// | |
| /// \param s The string to parse ("trace", "debug", "info", "warn", "error", | |
| /// "critical", "fatal", or "off"). | |
| /// \return The LogLevel, or an InvalidArgument error if unrecognized. | |
| inline Result<LogLevel> LogLevelFromString(std::string_view s) { | |
| auto level = StringUtils::ToLower(s); | |
| if (level == "trace") return LogLevel::kTrace; | |
| if (level == "debug") return LogLevel::kDebug; | |
| if (level == "info") return LogLevel::kInfo; | |
| if (level == "warn") return LogLevel::kWarn; | |
| if (level == "error") return LogLevel::kError; | |
| if (level == "critical") return LogLevel::kCritical; | |
| if (level == "fatal") return LogLevel::kFatal; | |
| if (level == "off") return LogLevel::kOff; | |
| return InvalidArgument("Invalid log level: {}", s); | |
| } | |
| } // namespace iceberg |