summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authoraquanight <aquanight@e03df62e-2008-0410-955e-edbf42e46eb7>2008-02-14 00:43:48 +0000
committeraquanight <aquanight@e03df62e-2008-0410-955e-edbf42e46eb7>2008-02-14 00:43:48 +0000
commitf995b32ff4a570f3c35521e5d426286dd25c1c89 (patch)
treefac73998662b97f9c594da716fe32c8e3111ae79 /src/modules
parent0fed3a06d0f889dc9429f74fcfff9398d2f29add (diff)
More <log> stuff
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8928 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_chanlog.cpp57
1 files changed, 53 insertions, 4 deletions
diff --git a/src/modules/m_chanlog.cpp b/src/modules/m_chanlog.cpp
index 0a189be7f..7d066a6ac 100644
--- a/src/modules/m_chanlog.cpp
+++ b/src/modules/m_chanlog.cpp
@@ -42,17 +42,66 @@ class ChannelLogStream : public LogStream
class ModuleChanLog : public Module
{
private:
- ChannelLogStream *l;
+ std::vector<ChannelLogStream*> cls;
public:
ModuleChanLog(InspIRCd* Me) : Module(Me)
{
- l = new ChannelLogStream(Me, ServerInstance->Config->LogLevel, "#services");
- Me->Logs->AddLogType("*", l);
}
virtual ~ModuleChanLog()
{
- delete l;
+ std::vector<ChannelLogStream*>::iterator i;
+ while ((i = cls.begin()) != cls.end())
+ {
+ ServerInstance->Logs->DelLogStream(*i);
+ cls.erase(i);
+ }
+ }
+
+ virtual void OnReadConfig(ServerConfig* sc, ConfigReader* Conf)
+ {
+ /* Since the CloseLogs prior to this hook just wiped out our logstreams for us, we just need to wipe the vector. */
+ std::vector<ChannelLogStream*>().swap(cls);
+ int index, max = Conf->Enumerate("log");
+ cls.reserve(max);
+ for (index = 0; index < max; ++index)
+ {
+ std::string method = Conf->ReadValue("log", "method", index);
+ if (method != "file") continue;
+ std::string type = Conf->ReadValue("log", "type", index);
+ std::string level = Conf->ReadValue("log", "level", index);
+ int loglevel = DEFAULT;
+ if (level == "debug")
+ {
+ loglevel = DEBUG;
+ ServerInstance->Config->debugging = true;
+ }
+ else if (level == "verbose")
+ {
+ loglevel = VERBOSE;
+ }
+ else if (level == "default")
+ {
+ loglevel = DEFAULT;
+ }
+ else if (level == "sparse")
+ {
+ loglevel = SPARSE;
+ }
+ else if (level == "none")
+ {
+ loglevel = NONE;
+ }
+ std::string target = Conf->ReadValue("log", "target", index);
+ ChannelLogStream* c = new ChannelLogStream(ServerInstance, loglevel, target);
+ irc::commasepstream css(type);
+ std::string tok;
+ while (css.GetToken(tok))
+ {
+ ServerInstance->Logs->AddLogType(tok, c);
+ }
+ cls.push_back(c);
+ }
}
virtual Version GetVersion()