123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- * Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.
- *
- * Licensed 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
- #include <cstdlib>
- #include <map>
- #include <string>
- #include "string_utils.h"
- namespace fastertransformer {
- class Logger {
- public:
- enum Level {
- TRACE = 0,
- DEBUG = 10,
- INFO = 20,
- WARNING = 30,
- ERROR = 40
- };
- static Logger& getLogger()
- {
- thread_local Logger instance;
- return instance;
- }
- Logger(Logger const&) = delete;
- void operator=(Logger const&) = delete;
- template<typename... Args>
- void log(const Level level, const std::string format, const Args&... args)
- {
- if (level_ <= level) {
- std::string fmt = getPrefix(level) + format + "\n";
- FILE* out = level_ < WARNING ? stdout : stderr;
- std::string logstr = fmtstr(fmt, args...);
- fprintf(out, "%s", logstr.c_str());
- }
- }
- template<typename... Args>
- void log(const Level level, const int rank, const std::string format, const Args&... args)
- {
- if (level_ <= level) {
- std::string fmt = getPrefix(level, rank) + format + "\n";
- FILE* out = level_ < WARNING ? stdout : stderr;
- std::string logstr = fmtstr(fmt, args...);
- fprintf(out, "%s", logstr.c_str());
- }
- }
- void setLevel(const Level level)
- {
- level_ = level;
- log(INFO, "Set logger level by %s", getLevelName(level).c_str());
- }
- int getLevel() const
- {
- return level_;
- }
- private:
- const std::string PREFIX = "[FT]";
- const std::map<const Level, const std::string> level_name_ = {
- {TRACE, "TRACE"}, {DEBUG, "DEBUG"}, {INFO, "INFO"}, {WARNING, "WARNING"}, {ERROR, "ERROR"}};
- #ifndef NDEBUG
- const Level DEFAULT_LOG_LEVEL = DEBUG;
- #else
- const Level DEFAULT_LOG_LEVEL = INFO;
- #endif
- Level level_ = DEFAULT_LOG_LEVEL;
- Logger();
- inline const std::string getLevelName(const Level level)
- {
- return level_name_.at(level);
- }
- inline const std::string getPrefix(const Level level)
- {
- return PREFIX + "[" + getLevelName(level) + "] ";
- }
- inline const std::string getPrefix(const Level level, const int rank)
- {
- return PREFIX + "[" + getLevelName(level) + "][" + std::to_string(rank) + "] ";
- }
- };
- #define FT_LOG(level, ...) \
- do { \
- if (fastertransformer::Logger::getLogger().getLevel() <= level) { \
- fastertransformer::Logger::getLogger().log(level, __VA_ARGS__); \
- } \
- } while (0)
- #define FT_LOG_TRACE(...) FT_LOG(fastertransformer::Logger::TRACE, __VA_ARGS__)
- #define FT_LOG_DEBUG(...) FT_LOG(fastertransformer::Logger::DEBUG, __VA_ARGS__)
- #define FT_LOG_INFO(...) FT_LOG(fastertransformer::Logger::INFO, __VA_ARGS__)
- #define FT_LOG_WARNING(...) FT_LOG(fastertransformer::Logger::WARNING, __VA_ARGS__)
- #define FT_LOG_ERROR(...) FT_LOG(fastertransformer::Logger::ERROR, __VA_ARGS__)
- } // namespace fastertransformer
|