mirror of
https://github.com/vale981/ray
synced 2025-03-06 10:31:39 -05:00
[Log] fix spdlog init race (#12973)
* fix spdlog init race * use global logger * refine logger name and constructor
This commit is contained in:
parent
695833082d
commit
01d4638b49
2 changed files with 27 additions and 20 deletions
|
@ -96,22 +96,19 @@ class SpdLogMessage final {
|
|||
explicit SpdLogMessage(const char *file, int line, int loglevel) : loglevel_(loglevel) {
|
||||
stream() << ConstBasename(file) << ":" << line << ": ";
|
||||
}
|
||||
inline std::shared_ptr<spdlog::logger> get_logger() {
|
||||
auto logger = spdlog::get("ray_log_sink");
|
||||
if (!logger) {
|
||||
logger = spdlog::get("stderr");
|
||||
}
|
||||
inline std::shared_ptr<spdlog::logger> GetDefaultLogger() {
|
||||
// We just emit all log informations to stderr when no default logger has been created
|
||||
// before starting ray log, which is for glog compatible.
|
||||
if (!logger) {
|
||||
logger = spdlog::stderr_color_mt("stderr");
|
||||
logger->set_pattern(RayLog::GetLogFormatPattern());
|
||||
}
|
||||
static auto logger = spdlog::stderr_color_mt("stderr");
|
||||
logger->set_pattern(RayLog::GetLogFormatPattern());
|
||||
return logger;
|
||||
}
|
||||
|
||||
inline void Flush() {
|
||||
auto logger = get_logger();
|
||||
auto logger = spdlog::get(RayLog::GetLoggerName());
|
||||
if (!logger) {
|
||||
logger = GetDefaultLogger();
|
||||
}
|
||||
// To avoid dump duplicated stacktrace with installed failure signal
|
||||
// handler, we have to check whether glog failure signal handler is enabled.
|
||||
if (!RayLog::IsFailureSignalHandlerEnabled() &&
|
||||
|
@ -197,6 +194,7 @@ std::string RayLog::log_dir_ = "";
|
|||
// Format pattern is 2020-08-21 17:00:00,000 I 100 1001 msg.
|
||||
// %L is loglevel, %P is process id, %t for thread id.
|
||||
std::string RayLog::log_format_pattern_ = "[%Y-%m-%d %H:%M:%S,%e %L %P %t] %v";
|
||||
std::string RayLog::logger_name_ = "ray_log_sink";
|
||||
long RayLog::log_rotation_max_size_ = 1 << 29;
|
||||
long RayLog::log_rotation_file_num_ = 10;
|
||||
bool RayLog::is_failure_signal_handler_installed_ = false;
|
||||
|
@ -319,14 +317,16 @@ void RayLog::StartRayLog(const std::string &app_name, RayLogLevel severity_thres
|
|||
spdlog::set_level(static_cast<spdlog::level::level_enum>(severity_threshold_));
|
||||
// Sink all log stuff to default file logger we defined here. We may need
|
||||
// multiple sinks for different files or loglevel.
|
||||
auto file_logger = spdlog::get("ray_log_sink");
|
||||
if (!file_logger) {
|
||||
file_logger =
|
||||
spdlog::rotating_logger_mt("ray_log_sink",
|
||||
dir_ends_with_slash + app_name_without_path + "_" +
|
||||
std::to_string(pid) + ".log",
|
||||
log_rotation_max_size_, log_rotation_file_num_);
|
||||
auto file_logger = spdlog::get(RayLog::GetLoggerName());
|
||||
if (file_logger) {
|
||||
// Drop this old logger first if we need reset filename or reconfig
|
||||
// logger.
|
||||
spdlog::drop(RayLog::GetLoggerName());
|
||||
}
|
||||
file_logger = spdlog::rotating_logger_mt(
|
||||
RayLog::GetLoggerName(),
|
||||
dir_ends_with_slash + app_name_without_path + "_" + std::to_string(pid) + ".log",
|
||||
log_rotation_max_size_, log_rotation_file_num_);
|
||||
spdlog::set_default_logger(file_logger);
|
||||
#endif
|
||||
} else {
|
||||
|
@ -345,7 +345,7 @@ void RayLog::StartRayLog(const std::string &app_name, RayLogLevel severity_thres
|
|||
err_sink->set_level(spdlog::level::err);
|
||||
|
||||
auto logger = std::shared_ptr<spdlog::logger>(
|
||||
new spdlog::logger("ray_log_sink", {console_sink, err_sink}));
|
||||
new spdlog::logger(RayLog::GetLoggerName(), {console_sink, err_sink}));
|
||||
logger->set_level(level);
|
||||
spdlog::set_default_logger(logger);
|
||||
#endif
|
||||
|
@ -401,8 +401,9 @@ void RayLog::ShutDownRayLog() {
|
|||
if (spdlog::default_logger()) {
|
||||
spdlog::default_logger()->flush();
|
||||
}
|
||||
spdlog::drop_all();
|
||||
spdlog::shutdown();
|
||||
// NOTE(lingxuan.zlx) All loggers will be closed in shutdown but we don't need drop
|
||||
// console logger out because of some console logging might be used after shutdown ray
|
||||
// log. spdlog::shutdown();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -450,6 +451,8 @@ bool RayLog::IsLevelEnabled(RayLogLevel log_level) {
|
|||
|
||||
std::string RayLog::GetLogFormatPattern() { return log_format_pattern_; }
|
||||
|
||||
std::string RayLog::GetLoggerName() { return logger_name_; }
|
||||
|
||||
RayLog::RayLog(const char *file_name, int line_number, RayLogLevel severity)
|
||||
// glog does not have DEBUG level, we can handle it using is_enabled_.
|
||||
: logging_provider_(nullptr), is_enabled_(severity >= severity_threshold_) {
|
||||
|
|
|
@ -156,6 +156,8 @@ class RayLog : public RayLogBase {
|
|||
|
||||
static std::string GetLogFormatPattern();
|
||||
|
||||
static std::string GetLoggerName();
|
||||
|
||||
private:
|
||||
// Hide the implementation of log provider by void *.
|
||||
// Otherwise, lib user may define the same macro to use the correct header file.
|
||||
|
@ -178,6 +180,8 @@ class RayLog : public RayLogBase {
|
|||
static long log_rotation_max_size_;
|
||||
// Log rotation file number.
|
||||
static long log_rotation_file_num_;
|
||||
// Ray default logger name.
|
||||
static std::string logger_name_;
|
||||
|
||||
protected:
|
||||
virtual std::ostream &Stream();
|
||||
|
|
Loading…
Add table
Reference in a new issue