You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktorrent/libktorrent/util/log.h

210 lines
5.5 KiB

/***************************************************************************
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.com *
* *
* This program 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; either version 2 of the License, or *
* (at your option) any later version. *
* *
* 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, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef JORISLOG_H
#define JORISLOG_H
#include "constants.h"
#include <tqstring.h>
// LOG MESSAGES CONSTANTS
#define LOG_NONE 0x00
#define LOG_IMPORTANT 0x01
#define LOG_NOTICE 0x03
#define LOG_DEBUG 0x07
#define LOG_ALL 0x0F
#define SYS_GEN 0x0010 // Genereral info messages
#define SYS_CON 0x0020 // Connections
#define SYS_TRK 0x0040 // Tracker
#define SYS_DHT 0x0080 // DHT
#define SYS_DIO 0x0100 // Disk IO related stuff, saving and loading of chunks ...
//plugins
#define SYS_IPF 0x1000 // IPFilter
#define SYS_SRC 0x2000 // Search plugin
#define SYS_PNP 0x4000 // UPnP plugin
#define SYS_INW 0x8000 // InfoWidget
#define SYS_SNF 0x10000 // ScanFolder plugin
#define SYS_PFI 0x20000 // Part file import
#define SYS_SCD 0x40000 // Scheduler plugin
#define SYS_RSS 0x80000 // RSS plugin
#define SYS_WEB 0x100000 // WebInterface plugin
#define SYS_ZCO 0x200000 // ZeroConf plugin
class KURL;
namespace kt
{
class LogMonitorInterface;
}
namespace bt
{
/**
* @author Joris Guisson
* @brief Class which writes messages to a logfile
*
* This class writes messages to a logfile. To use it, create an instance,
* set the output file and write stuff with the << operator.
*
* By default all messages will also be printed on the standard output. This
* can be turned down using the @a setOutputToConsole function.
*
* There is also the possibility to monitor what is written to the log using
* the LogMonitorInterface class.
*/
class Log
{
class Private;
Private* priv;
public:
/**
* Constructor.
*/
Log();
/**
* Destructor, closes the file.
*/
virtual ~Log();
/**
* Enable or disable the printing of log messages to the standard
* output.
* @param on Enable or disable
*/
void setOutputToConsole(bool on);
/**
* Add a log monitor.
* @param m The log monitor
*/
void addMonitor(kt::LogMonitorInterface* m);
/**
* Remove a log monitor.
* @param m The log monitor
*/
void removeMonitor(kt::LogMonitorInterface* m);
/**
* Set the output logfile.
* @param file The name of the file
* @throw Exception if the file can't be opened
*/
void setOutputFile(const TQString & file);
/**
* Write a number to the log file.
* Anything which can be passed to TQString::number will do.
* @param val The value
* @return This Log
*/
template <class T>
Log & operator << (T val)
{
return operator << (TQString::number(val));
}
/**
* Apply a function to the Log.
* @param func The function
* @return This Log
*/
Log & operator << (Log & (*func)(Log & ))
{
return func(*this);
}
/**
* Output a TQString to the log.
* @param s The TQString
* @return This Log
*/
Log & operator << (const char* s);
/**
* Output a TQString to the log.
* @param s The TQString
* @return This Log
*/
Log & operator << (const TQString & s);
/**
* Output a 64 bit integer to the log.
* @param v The integer
* @return This Log
*/
Log & operator << (Uint64 v);
/**
* Output a 64 bit integer to the log.
* @param v The integer
* @return This Log
*/
Log & operator << (Int64 v);
/**
* Prints and endline character to the Log and flushes it.
* @param lg The Log
* @return @a lg
*/
friend Log & endl(Log & lg);
/**
* Write an URL to the file.
* @param text The KURL
* @return This Log
*/
Log & operator << (const KURL & url);
/**
* Sets a filter for log messages. Applies only to listeners via LogMonitorInterface!
* @param filter SYS & LOG flags combined with bitwise OR.
*/
void setFilter(unsigned int filter);
/// Lock the mutex of the log, should be called in Out()
void lock();
/// Called by the auto log rotate job when it has finished
void logRotateDone();
};
Log & endl(Log & lg);
Log & Out(unsigned int arg = 0x00);
inline Log & GenOut(unsigned int arg) {return Out(SYS_GEN|arg);}
inline Log & DHTOut(unsigned int arg) {return Out(SYS_DHT|arg);}
inline Log & ConOut(unsigned int arg) {return Out(SYS_CON|arg);}
inline Log & TrkOut(unsigned int arg) {return Out(SYS_TRK|arg);}
}
#endif