#include <map>
#include <set>
+#include <fmt/format.h>
+#include <fmt/ostream.h>
+
#include "include/types.h"
#include "PaxosService.h"
namespace ceph {
namespace logging {
class Graylog;
+ class JournaldClusterLogger;
}
}
public md_config_obs_t {
private:
std::multimap<utime_t,LogEntry> pending_log;
- LogSummary pending_summary, summary;
+ unordered_set<LogEntryKey> pending_keys;
+
+ LogSummary summary;
+
+ version_t external_log_to = 0;
+ std::map<std::string, int> channel_fds;
+
+ fmt::memory_buffer file_log_buffer;
struct log_channel_info {
std::map<std::string,std::string> log_to_graylog;
std::map<std::string,std::string> log_to_graylog_host;
std::map<std::string,std::string> log_to_graylog_port;
+ std::map<std::string,std::string> log_to_journald;
std::map<std::string, std::shared_ptr<ceph::logging::Graylog>> graylogs;
+ std::unique_ptr<ceph::logging::JournaldClusterLogger> journald;
uuid_d fsid;
std::string host;
- void clear() {
- log_to_syslog.clear();
- syslog_level.clear();
- syslog_facility.clear();
- log_file.clear();
- expanded_log_file.clear();
- log_file_level.clear();
- log_to_graylog.clear();
- log_to_graylog_host.clear();
- log_to_graylog_port.clear();
- graylogs.clear();
- }
+ log_channel_info();
+ ~log_channel_info();
+
+ void clear();
/** expands $channel meta variable on all maps *EXCEPT* log_file
*
}
std::shared_ptr<ceph::logging::Graylog> get_graylog(const std::string &channel);
+
+ bool do_log_to_journald(const std::string &channel) {
+ return (get_str_map_key(log_to_journald, channel,
+ &CLOG_CONFIG_DEFAULT_KEY) == "true");
+ }
+
+ ceph::logging::JournaldClusterLogger &get_journald();
} channels;
void update_log_channels();
void update_from_paxos(bool *need_bootstrap) override;
void create_pending() override; // prepare a new pending
// propose pending update to peers
+ void generate_logentry_key(const std::string& channel, version_t v, std::string *out);
void encode_pending(MonitorDBStore::TransactionRef t) override;
void encode_full(MonitorDBStore::TransactionRef t) override;
version_t get_trim_to() const override;
bool should_propose(double& delay) override;
- bool should_stash_full() override {
- // commit a LogSummary on every commit
- return true;
- }
+ bool should_stash_full() override;
struct C_Log;
void check_subs();
void check_sub(Subscription *s);
+ void log_external_close_fds();
+ void log_external(const LogEntry& le);
+ void log_external_backlog();
+
/**
* translate log sub name ('log-info') to integer id
*
"mon_cluster_log_to_graylog",
"mon_cluster_log_to_graylog_host",
"mon_cluster_log_to_graylog_port",
+ "mon_cluster_log_to_journald",
NULL
};
return KEYS;