diff options
author | epbugaev <epbugaev@yandex-team.com> | 2023-02-22 13:15:37 +0300 |
---|---|---|
committer | epbugaev <epbugaev@yandex-team.com> | 2023-02-22 13:15:37 +0300 |
commit | af0b2f5fabca4986dda937439e8b460f13cef2a6 (patch) | |
tree | b0b85f684557b6c21c6f988dee5bbf5c729402ea | |
parent | f94243367a2275dcaaea1c3e692fe1ed6c484a71 (diff) | |
download | ydb-af0b2f5fabca4986dda937439e8b460f13cef2a6.tar.gz |
YQL fix yqlworker ua logging crash on fork
Postpone ua logger initalization in yqlworker
-rw-r--r-- | ydb/library/yql/utils/log/log.cpp | 32 | ||||
-rw-r--r-- | ydb/library/yql/utils/log/log.h | 5 |
2 files changed, 32 insertions, 5 deletions
diff --git a/ydb/library/yql/utils/log/log.cpp b/ydb/library/yql/utils/log/log.cpp index bc67143782..b08e3479ec 100644 --- a/ydb/library/yql/utils/log/log.cpp +++ b/ydb/library/yql/utils/log/log.cpp @@ -327,11 +327,6 @@ void InitLogger(const NProto::TLoggingConfig& config, bool startAsDaemon) { break; } default: { - TYqlUaLogBackendCreatorInitContext creatorContext(NProto::TLoggingConfig::ELogTo_Name(logDest.GetType()), - logDest.GetTarget()); - if (auto creator = ILogBackendCreator::Create(creatorContext)) { - backends.emplace_back(creator->CreateLogBackend()); - } break; } } @@ -379,6 +374,33 @@ void CleanupLogger() { } } +void AddUnifiedAgentLogger(const NProto::TLoggingConfig& config) { + std::vector<THolder<TLogBackend>> backends; + + for (const auto& logDest : config.GetLogDest()) { + // Generate unified agent backend if specified + if (logDest.GetType() == NProto::TLoggingConfig::YQL_UA_LOGGER) { + TYqlUaLogBackendCreatorInitContext creatorContext(NProto::TLoggingConfig::ELogTo_Name(logDest.GetType()), + logDest.GetTarget()); + if (auto creator = ILogBackendCreator::Create(creatorContext)) { + backends.emplace_back(creator->CreateLogBackend()); + } + break; + } + } + + if (!backends.empty()) { + auto& logger = TLoggerOperator<TYqlLog>::Log(); + + THolder<TCompositeLogBackend> compositeBackend = MakeHolder<TCompositeLogBackend>(); + compositeBackend->AddLogBackend(logger.ReleaseBackend()); + for (auto& backend : backends) { + compositeBackend->AddLogBackend(std::move(backend)); + } + logger.ResetBackend(std::move(compositeBackend)); + } +} + } // namespace NLog } // namespace NYql diff --git a/ydb/library/yql/utils/log/log.h b/ydb/library/yql/utils/log/log.h index 6ab38b98db..3b16b24e3a 100644 --- a/ydb/library/yql/utils/log/log.h +++ b/ydb/library/yql/utils/log/log.h @@ -160,6 +160,11 @@ void InitLogger(const TString& log, bool startAsDaemon = false); void InitLogger(const NProto::TLoggingConfig& loggingConfig, bool startAsDaemon = false); /** + * @brief Add unified agent backends described in config to existing logger. +*/ +void AddUnifiedAgentLogger(const NProto::TLoggingConfig& config); + +/** * @brief Initialize logger with concrete backend. * * @param backend - logger backend |