Files
eden/src/common/logging/log.h
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

68 lines
3.5 KiB
C++
Raw Normal View History

2022-05-15 02:06:02 +02:00
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
2014-10-28 05:36:00 -02:00
#pragma once
#include <algorithm>
#include <string_view>
2022-01-08 01:48:53 -07:00
#include <fmt/format.h>
#include "common/logging/formatter.h"
2021-06-13 10:31:47 -04:00
#include "common/logging/types.h"
2014-10-28 05:36:00 -02:00
namespace Common::Log {
2014-10-28 05:36:00 -02:00
// trims up to and including the last of ../, ..\, src/, src\ in a string
constexpr const char* TrimSourcePath(std::string_view source) {
const auto rfind = [source](const std::string_view match) {
return source.rfind(match) == source.npos ? 0 : (source.rfind(match) + match.size());
};
auto idx = std::max({rfind("src/"), rfind("src\\"), rfind("../"), rfind("..\\")});
return source.data() + idx;
}
/// Logs a message to the global logger, using fmt
2018-04-05 22:42:09 -06:00
void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
2024-04-05 01:58:29 +02:00
unsigned int line_num, const char* function, fmt::string_view format,
2018-04-05 22:42:09 -06:00
const fmt::format_args& args);
template <typename... Args>
void FmtLogMessage(Class log_class, Level log_level, const char* filename, unsigned int line_num,
2024-04-05 01:58:29 +02:00
const char* function, fmt::format_string<Args...> format, const Args&... args) {
2018-04-05 22:42:09 -06:00
FmtLogMessageImpl(log_class, log_level, filename, line_num, function, format,
2018-07-18 17:33:45 -04:00
fmt::make_format_args(args...));
}
} // namespace Common::Log
2014-10-28 05:36:00 -02:00
#ifdef _DEBUG
2018-07-02 10:13:26 -06:00
#define LOG_TRACE(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Trace, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)
#else
2018-07-02 10:13:26 -06:00
#define LOG_TRACE(log_class, fmt, ...) (void(0))
#endif
2018-07-02 10:13:26 -06:00
#define LOG_DEBUG(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Debug, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)
2018-07-02 10:13:26 -06:00
#define LOG_INFO(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Info, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)
2018-07-02 10:13:26 -06:00
#define LOG_WARNING(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Warning, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)
2018-07-02 10:13:26 -06:00
#define LOG_ERROR(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Error, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)
2018-07-02 10:13:26 -06:00
#define LOG_CRITICAL(log_class, ...) \
Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Critical, \
Common::Log::TrimSourcePath(__FILE__), __LINE__, __func__, \
__VA_ARGS__)