diff --git a/Config.cpp b/Config.cpp index ab99f293..a29e4b02 100644 --- a/Config.cpp +++ b/Config.cpp @@ -111,6 +111,7 @@ namespace config { ("tunconf", value()->default_value(""), "Path to config with tunnels list and options (default: try ~/.i2pd/tunnels.cfg or /var/lib/i2pd/tunnels.cfg)") ("pidfile", value()->default_value(""), "Write pidfile to given path") ("log", value()->zero_tokens(), "Write logs to file instead stdout") + ("logfile", value()->default_value(""), "Path to logfile (stdout if not set, autodetect if daemon)") ("loglevel", value()->default_value("info"), "Set the minimal level of log messages (debug, info, warn, error)") ("host", value()->default_value(""), "External IP (deprecated)") ("port,p", value()->default_value(4567), "Port to listen for incoming connections") diff --git a/Daemon.cpp b/Daemon.cpp index a2d33720..a0c3f5bb 100644 --- a/Daemon.cpp +++ b/Daemon.cpp @@ -116,22 +116,25 @@ namespace i2p bool Daemon_Singleton::start() { - // initialize log if (isLogging) { - if (isDaemon) - { - std::string logfile_path = IsService () ? "/var/log" : i2p::util::filesystem::GetDataDir().string(); + // set default to stdout + std::string logfile = ""; i2p::config::GetOption("logfile", logfile); + std::string loglevel = ""; i2p::config::GetOption("loglevel", loglevel); + if (isDaemon && logfile == "") { + // can't log to stdout, use autodetect of logfile + if (IsService ()) { + logfile = "/var/log"; + } else { + logfile = i2p::util::filesystem::GetDataDir().string(); + } #ifndef _WIN32 - logfile_path.append("/i2pd.log"); + logfile.append("/i2pd.log"); #else - logfile_path.append("\\i2pd.log"); + logfile.append("\\i2pd.log"); #endif - StartLog (logfile_path); - } else { - StartLog (""); // write to stdout } - std::string loglevel; i2p::config::GetOption("loglevel", loglevel); + StartLog (logfile); g_Log->SetLogLevel(loglevel); }