X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Ffilelogger.h;h=6b1a0c819c10ce7c04ed3b3fc3e45e5069522106;hb=635cb9d65f6d7f6758ae8ed874da00c8d94b6e39;hp=ab92e8cdee6556634a36aa75e095d890b14479cb;hpb=b9658bfe6d45e78136139f50edabb54caba8bdf4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/filelogger.h b/include/filelogger.h index ab92e8cde..6b1a0c819 100644 --- a/include/filelogger.h +++ b/include/filelogger.h @@ -1,98 +1,42 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * Copyright (C) 2013, 2017 Sadie Powell + * Copyright (C) 2012 Robby + * Copyright (C) 2009 Uli Schlachter + * Copyright (C) 2008, 2010 Craig Edwards + * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2008 Robin Burchell + * Copyright (C) 2007 Dennis Friis * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. * - * --------------------------------------------------- + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ -#ifndef __LOG_H__ -#define __LOG_H__ - -#include -#include -#include -#include "socketengine.h" - - -/** Debug levels for use with InspIRCd::Log() - * */ -enum DebugLevel -{ - DEBUG = 10, - VERBOSE = 20, - DEFAULT = 30, - SPARSE = 40, - NONE = 50 -}; +#pragma once -/* Forward declaration -- required */ -class InspIRCd; +#include "logger.h" -/** This class implements a nonblocking log-writer. - * Most people writing an ircd give little thought to their disk - * i/o. On a congested system, disk writes can block for long - * periods of time (e.g. if the system is busy and/or swapping - * a lot). If we just use a blocking fprintf() call, this could - * block for undesirable amounts of time (half of a second through - * to whole seconds). We DO NOT want this, so we make our logfile - * nonblocking and hook it into the SocketEngine. - * NB: If the operating system does not support nonblocking file - * I/O (linux seems to, as does freebsd) this will default to - * blocking behaviour. +/** A logging class which logs to a streamed file. */ -class CoreExport FileLogger : public EventHandler +class CoreExport FileLogStream : public LogStream { - protected: - /** The creator/owner of this object - */ - InspIRCd* ServerInstance; - /** The log file (fd is inside this somewhere, - * we get it out with fileno()) - */ - FILE* log; - /** Buffer of pending log lines to be written - */ - std::string buffer; - /** Number of write operations that have occured - */ - int writeops; + private: + FileWriter *f; public: - /** The constructor takes an already opened logfile. - */ - FileLogger(InspIRCd* Instance, FILE* logfile); - /** This returns false, logfiles are writeable. - */ - virtual bool Readable(); - /** Handle pending write events. - * This will flush any waiting data to disk. - * If any data remains after the fprintf call, - * another write event is scheduled to write - * the rest of the data when possible. - */ - virtual void HandleEvent(EventType et, int errornum = 0); - /** Write one or more preformatted log lines. - * If the data cannot be written immediately, - * this class will insert itself into the - * SocketEngine, and register a write event, - * and when the write event occurs it will - * attempt again to write the data. - */ - void WriteLogLine(const std::string &line); - /** Close the log file and cancel any events. - */ - virtual void Close(); - /** Close the log file and cancel any events. - * (indirectly call Close() - */ - virtual ~FileLogger(); -}; + FileLogStream(LogLevel loglevel, FileWriter *fw); + virtual ~FileLogStream(); -#endif + void OnLog(LogLevel loglevel, const std::string& type, const std::string& msg) CXX11_OVERRIDE; +};