]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/logger.h
Fix warnings from Doxygen.
[user/henk/code/inspircd.git] / include / logger.h
index 7b4c45f1c3e3379e9ca2bf594ee40b2e5ef3573f..5d4a80d9f219756ea149a434d999cbe68f6df39b 100644 (file)
 
 #pragma once
 
+/** Levels at which messages can be logged. */
+enum LogLevel
+{
+       LOG_RAWIO   = 5,
+       LOG_DEBUG   = 10,
+       LOG_VERBOSE = 20,
+       LOG_DEFAULT = 30,
+       LOG_SPARSE  = 40,
+       LOG_NONE    = 50
+};
+
 /** Simple wrapper providing periodic flushing to a disk-backed file.
  */
 class CoreExport FileWriter
@@ -30,14 +41,18 @@ class CoreExport FileWriter
         */
        FILE* log;
 
+       /** The number of write operations after which we should flush.
+        */
+       unsigned int flush;
+
        /** Number of write operations that have occured
         */
-       int writeops;
+       unsigned int writeops;
 
  public:
        /** The constructor takes an already opened logfile.
         */
-       FileWriter(FILE* logfile);
+       FileWriter(FILE* logfile, unsigned int flushcount);
 
        /** Write one or more preformatted log lines.
         * If the data cannot be written immediately,
@@ -76,9 +91,11 @@ class CoreExport FileWriter
 class CoreExport LogStream : public classbase
 {
  protected:
-       int loglvl;
+       LogLevel loglvl;
  public:
-       LogStream(int loglevel) : loglvl(loglevel)
+       static const char LogHeader[];
+
+       LogStream(LogLevel loglevel) : loglvl(loglevel)
        {
        }
 
@@ -90,18 +107,18 @@ class CoreExport LogStream : public classbase
        /** Changes the loglevel for this LogStream on-the-fly.
         * This is needed for -nofork. But other LogStreams could use it to change loglevels.
         */
-       void ChangeLevel(int lvl) { this->loglvl = lvl; }
+       void ChangeLevel(LogLevel lvl) { this->loglvl = lvl; }
 
        /** Called when there is stuff to log for this particular logstream. The derived class may take no action with it, or do what it
         * wants with the output, basically. loglevel and type are primarily for informational purposes (the level and type of the event triggered)
         * and msg is, of course, the actual message to log.
         */
-       virtual void OnLog(int loglevel, const std::string &type, const std::string &msg) = 0;
+       virtual void OnLog(LogLevel loglevel, const std::string &type, const std::string &msg) = 0;
 };
 
 typedef std::map<FileWriter*, int> FileLogMap;
 
-class CoreExport LogManager
+class CoreExport LogManager : public fakederef<LogManager>
 {
  private:
        /** Lock variable, set to true when a log is in progress, which prevents further loggging from happening and creating a loop.
@@ -126,7 +143,6 @@ class CoreExport LogManager
        FileLogMap FileLogs;
 
  public:
-
        LogManager();
        ~LogManager();
 
@@ -201,12 +217,12 @@ class CoreExport LogManager
         * @param loglevel Log message level (LOG_DEBUG, LOG_VERBOSE, LOG_DEFAULT, LOG_SPARSE, LOG_NONE)
         * @param msg The message to be logged (literal).
         */
-       void Log(const std::string &type, int loglevel, const std::string &msg);
+       void Log(const std::string &type, LogLevel loglevel, const std::string &msg);
 
        /** Logs an event, sending it to all LogStreams registered for the type.
         * @param type Log message type (ex: "USERINPUT", "MODULE", ...)
         * @param loglevel Log message level (LOG_DEBUG, LOG_VERBOSE, LOG_DEFAULT, LOG_SPARSE, LOG_NONE)
         * @param fmt The format of the message to be logged. See your C manual on printf() for details.
         */
-       void Log(const std::string &type, int loglevel, const char *fmt, ...) CUSTOM_PRINTF(4, 5);
+       void Log(const std::string &type, LogLevel loglevel, const char *fmt, ...) CUSTOM_PRINTF(4, 5);
 };