/*
- * Copyright 2004-present Facebook, Inc.
+ * Copyright 2017-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
std::vector<std::shared_ptr<LogHandler>> getHandlers() const;
+ /**
+ * Replace the list of LogHandlers with a completely new list.
+ */
+ void replaceHandlers(std::vector<std::shared_ptr<LogHandler>> handlers);
+
+ /**
+ * Update the LogHandlers attached to this LogCategory by replacing
+ * currently attached handlers with new LogHandler objects.
+ *
+ * The handlerMap argument is a map of (old_handler -> new_handler)
+ * If any of the LogHandlers currently attached to this category are found in
+ * the handlerMap, replace them with the new handler indicated in the map.
+ *
+ * This is used when the LogHandler configuration is changed requiring one or
+ * more LogHandler objects to be replaced with new ones.
+ */
+ void updateHandlers(const std::unordered_map<
+ std::shared_ptr<LogHandler>,
+ std::shared_ptr<LogHandler>>& handlerMap);
+
/* Internal methods for use by other parts of the logging library code */
/**
private:
enum : uint32_t { FLAG_INHERIT = 0x80000000 };
+ // FLAG_INHERIT is the stored in the uppermost bit of the LogLevel field.
+ // assert that it does not conflict with valid LogLevel values.
+ static_assert(
+ static_cast<uint32_t>(LogLevel::MAX_LEVEL) < FLAG_INHERIT,
+ "The FLAG_INHERIT bit must not be set in any valid LogLevel value");
+
// Forbidden copy constructor and assignment operator
LogCategory(LogCategory const&) = delete;
LogCategory& operator=(LogCategory const&) = delete;