]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/logger.cpp
Per-logstream loglevels.
[user/henk/code/inspircd.git] / src / logger.cpp
index 53cc7941f43be5198ea4970e6607926e2b6f9d36..03c02fe09f9659a052e83260076229c19edf26f0 100644 (file)
@@ -127,8 +127,11 @@ bool LogManager::DelLogType(const std::string &type, LogStream *l)
 
 void LogManager::Log(const std::string &type, int loglevel, const char *fmt, ...)
 {
+       if (Logging)
+               return;
+
        va_list a;
-       char buf[65536];
+       static char buf[65536];
 
        va_start(a, fmt);
        vsnprintf(buf, 65536, fmt, a);
@@ -139,6 +142,19 @@ void LogManager::Log(const std::string &type, int loglevel, const char *fmt, ...
 
 void LogManager::Log(const std::string &type, int loglevel, const std::string &msg)
 {
+       if (Logging)
+               return;
+
+       Logging = true;
+
+       std::vector<LogStream *>::iterator gi = GlobalLogStreams.begin();
+
+       while (gi != GlobalLogStreams.end())
+       {
+               (*gi)->OnLog(loglevel, type, msg);
+               gi++;
+       }
+
        std::map<std::string, std::vector<LogStream *> >::iterator i = LogStreams.find(type);
 
        if (i != LogStreams.end())
@@ -147,23 +163,12 @@ void LogManager::Log(const std::string &type, int loglevel, const std::string &m
 
                while (it != i->second.end())
                {
-                       (*it)->OnLog(loglevel, msg);
+                       (*it)->OnLog(loglevel, type, msg);
                        it++;
                }
-
-               return;
-       }
-
-       std::vector<LogStream *>::iterator gi = GlobalLogStreams.begin();
-
-       while (gi != GlobalLogStreams.end())
-       {
-               (*gi)->OnLog(loglevel, msg);
-               gi++;
        }
 
-       // blurp, no handler for this type
-       return;
+       Logging = false;
 }