summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-04-12 17:55:47 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-04-12 17:55:47 +0000
commitcbefea57e9b68df8a272e9041e079b647f627554 (patch)
tree31eeb5e1da6da06365690044d1b72b4bde16080a
parent27e2941ec9a9a7609749b7310a787548ddf716a5 (diff)
Fixes for default log. It is now called ~/.inspircd/startup.log unless overridden by -logfile commandline param. The name of the log is more indicative of what it stores, and the location is more sane and fits in with standards.
If the home directory cant be found from either HOME or USERPROFILE env vars, then the startup.log is dumped to the current directory. Removed -nolog from ./inspircd debug, antique setting. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9472 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--.inspircd.inc2
-rw-r--r--src/helperfuncs.cpp53
2 files changed, 53 insertions, 2 deletions
diff --git a/.inspircd.inc b/.inspircd.inc
index 183c11c71..0ba1f88de 100644
--- a/.inspircd.inc
+++ b/.inspircd.inc
@@ -115,7 +115,7 @@ sub debug {
checkgdb();
# If we are still alive here.. Try starting the IRCd..
- system("gdb --command=$basepath/.gdbargs --args $binpath/$executable -nofork -debug -nolog");
+ system("gdb --command=$basepath/.gdbargs --args $binpath/$executable -nofork -debug");
}
sub screendebug
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index d2fbca6f6..3ff94e4f6 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -6,7 +6,7 @@
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
- * the file COPYING for details.
+ * the file COPYING for details.
*
* ---------------------------------------------------
*/
@@ -287,6 +287,57 @@ bool InspIRCd::OpenLog(char**, int)
this->Logs->SetupNoFork();
}
Config->MyDir = Config->GetFullProgDir();
+
+ /* Attempt to find home directory, portable to windows */
+ const char* home = getenv("HOME");
+ if (!home)
+ {
+ /* No $HOME, log to %USERPROFILE% */
+ home = getenv("USERPROFILE");
+ if (!home)
+ {
+ /* Nothing could be found at all, log to current dir */
+ Config->logpath = "./startup.log";
+ }
+ }
+
+ if (!Config->writelog) return true; // Skip opening default log if -nolog
+
+ if (!*this->LogFileName)
+ {
+ if (Config->logpath.empty())
+ {
+ std::string path = std::string(home) + "/.inspircd";
+ if (!mkdir(path.c_str(), 0700))
+ {
+ /* Log to ~/.inspircd/ircd.log */
+ Config->logpath = path + "/startup.log";
+ }
+ else
+ {
+ /* Couldn't make ~/.inspircd directory, log to current dir */
+ Config->logpath = "./startup.log";
+ printf("\nWARNING: Unable to create directory: %s (%s)\n", path.c_str(), strerror(errno));
+ }
+ }
+
+ Config->log_file = fopen(Config->logpath.c_str(),"a+");
+ }
+ else
+ {
+ Config->log_file = fopen(this->LogFileName,"a+");
+ }
+
+ if (!Config->log_file)
+ {
+ return false;
+ }
+
+ FileWriter* fw = new FileWriter(this, Config->log_file);
+ FileLogStream *f = new FileLogStream(this, (Config->forcedebug ? DEBUG : DEFAULT), fw);
+
+ this->Logs->AddLogType("*", f, true);
+
return true;
}