aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-08-23 23:18:55 +0100
committerGravatar Sadie Powell2022-08-23 23:18:55 +0100
commita5c2a94bd8d6b2e7ea5fc531a109e5ea3e81a287 (patch)
treef138145b2047cd910b90c3dee83577fa0990b463 /src
parentRefactor the core event macros. (diff)
Fix cached log messages not having the correct timestamp.
Diffstat (limited to 'src')
-rw-r--r--src/logging.cpp18
-rw-r--r--src/modules/extra/m_log_json.cpp6
-rw-r--r--src/modules/extra/m_log_syslog.cpp2
-rw-r--r--src/modules/m_log_sql.cpp4
4 files changed, 16 insertions, 14 deletions
diff --git a/src/logging.cpp b/src/logging.cpp
index 85c18fde7..279584577 100644
--- a/src/logging.cpp
+++ b/src/logging.cpp
@@ -60,13 +60,13 @@ Log::FileMethod::~FileMethod()
fclose(file);
}
-void Log::FileMethod::OnLog(Level level, const std::string& type, const std::string& message)
+void Log::FileMethod::OnLog(time_t time, Level level, const std::string& type, const std::string& message)
{
static time_t prevtime = 0;
static std::string timestr;
- if (prevtime != ServerInstance->Time())
+ if (prevtime != time)
{
- prevtime = ServerInstance->Time();
+ prevtime = time;
timestr = InspIRCd::TimeString(prevtime);
}
@@ -139,8 +139,9 @@ Log::MethodPtr Log::StreamEngine::Create(std::shared_ptr<ConfigTag> tag)
return std::make_shared<FileMethod>(name, file, 1, false);
}
-Log::Manager::CachedMessage::CachedMessage(Level l, const std::string& t, const std::string& m)
- : level(l)
+Log::Manager::CachedMessage::CachedMessage(time_t ts, Level l, const std::string& t, const std::string& m)
+ : time(ts)
+ , level(l)
, type(t)
, message(m)
{
@@ -234,7 +235,7 @@ void Log::Manager::OpenLogs(bool requiremethods)
for (const auto& message : cache)
{
if (logger.level >= message.level && logger.types.Contains(message.type))
- logger.method->OnLog(message.level, message.type, message.message);
+ logger.method->OnLog(message.time, message.level, message.type, message.message);
}
}
@@ -266,14 +267,15 @@ void Log::Manager::Write(Level level, const std::string& type, const std::string
return; // Avoid log loops.
logging = true;
+ time_t time = ServerInstance->Time();
for (const auto& logger : loggers)
{
if (logger.level >= level && logger.types.Contains(type))
- logger.method->OnLog(level, type, message);
+ logger.method->OnLog(time, level, type, message);
}
if (caching)
- cache.emplace_back(level, type, message);
+ cache.emplace_back(time, level, type, message);
logging = false;
}
diff --git a/src/modules/extra/m_log_json.cpp b/src/modules/extra/m_log_json.cpp
index cc7ba9334..afa6d58a3 100644
--- a/src/modules/extra/m_log_json.cpp
+++ b/src/modules/extra/m_log_json.cpp
@@ -63,13 +63,13 @@ public:
// RapidJSON API: We implement our own flushing in OnLog.
void Flush() { }
- void OnLog(Log::Level level, const std::string& type, const std::string& message) override
+ void OnLog(time_t time, Log::Level level, const std::string& type, const std::string& message) override
{
static time_t prevtime = 0;
static std::string timestr;
- if (prevtime != ServerInstance->Time())
+ if (prevtime != time)
{
- prevtime = ServerInstance->Time();
+ prevtime = time;
timestr = InspIRCd::TimeString(prevtime, "%Y-%m-%dT%H:%M:%S%z");
}
diff --git a/src/modules/extra/m_log_syslog.cpp b/src/modules/extra/m_log_syslog.cpp
index 6e94c76a1..a3cf23ec6 100644
--- a/src/modules/extra/m_log_syslog.cpp
+++ b/src/modules/extra/m_log_syslog.cpp
@@ -49,7 +49,7 @@ private:
}
public:
- void OnLog(Log::Level level, const std::string& type, const std::string& message) override
+ void OnLog(time_t time, Log::Level level, const std::string& type, const std::string& message) override
{
syslog(LevelToPriority(level), "%s: %s", type.c_str(), message.c_str());
}
diff --git a/src/modules/m_log_sql.cpp b/src/modules/m_log_sql.cpp
index 6d6df048d..4ffe6784a 100644
--- a/src/modules/m_log_sql.cpp
+++ b/src/modules/m_log_sql.cpp
@@ -59,7 +59,7 @@ public:
{
}
- void OnLog(Log::Level level, const std::string& type, const std::string& message) override
+ void OnLog(time_t time, Log::Level level, const std::string& type, const std::string& message) override
{
if (!sql)
{
@@ -71,7 +71,7 @@ public:
{ "level", ConvToStr(static_cast<uint8_t>(level)) },
{ "levelstr", Log::LevelToString(level) },
{ "message", message },
- { "time", ConvToStr(ServerInstance->Time()) },
+ { "time", ConvToStr(time) },
{ "type", type },
};
sql->Submit(new SQLQuery(thismod), query, params);