diff --git a/Config.cpp b/Config.cpp index 5e775e74..8671f38c 100644 --- a/Config.cpp +++ b/Config.cpp @@ -110,7 +110,7 @@ namespace config { ("conf", value()->default_value(""), "Path to main i2pd config file (default: try ~/.i2pd/i2p.conf or /var/lib/i2pd/i2p.conf)") ("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(""), "Path to pidfile (default: ~/i2pd/i2pd.pid or /var/lib/i2pd/i2pd.pid)") - ("log", value()->default_value(""), "Logs destination: stdout, file (stdout if not set, file - otherwise, for compatibility)") + ("log", value()->default_value(""), "Logs destination: stdout, file, syslog (stdout if not set)") ("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)") ("family", value()->default_value(""), "Specify a family, router belongs to") diff --git a/Daemon.cpp b/Daemon.cpp index 8b8dfac1..29d52ecc 100644 --- a/Daemon.cpp +++ b/Daemon.cpp @@ -79,17 +79,38 @@ namespace i2p i2p::config::ParseConfig(config); i2p::config::Finalize(); - i2p::crypto::InitCrypto (); - i2p::context.Init (); - i2p::config::GetOption("daemon", isDaemon); - // TODO: move log init here + std::string logs = ""; i2p::config::GetOption("log", logs); + std::string logfile = ""; i2p::config::GetOption("logfile", logfile); + std::string loglevel = ""; i2p::config::GetOption("loglevel", loglevel); + + /* setup logging */ + if (isDaemon && (logs == "" || logs == "stdout")) + logs = "file"; + + i2p::log::Logger().SetLogLevel(loglevel); + if (logs == "file") { + if (logfile == "") + logfile = i2p::fs::DataDirPath("i2pd.log"); + LogPrint(eLogInfo, "Log: will send messages to ", logfile); + i2p::log::Logger().SendTo (logfile); +#ifndef _WIN32 + } else if (logs == "syslog") { + LogPrint(eLogInfo, "Log: will send messages to syslog"); + i2p::log::Logger().SendTo("i2pd", LOG_DAEMON); +#endif + } else { + // use stdout -- default + } LogPrint(eLogInfo, "i2pd v", VERSION, " starting"); LogPrint(eLogDebug, "FS: main config file: ", config); LogPrint(eLogDebug, "FS: data directory: ", datadir); + i2p::crypto::InitCrypto (); + i2p::context.Init (); + uint16_t port; i2p::config::GetOption("port", port); if (!i2p::config::IsDefault("port")) { @@ -152,26 +173,6 @@ namespace i2p bool Daemon_Singleton::start() { - std::string logs = ""; i2p::config::GetOption("log", logs); - std::string logfile = ""; i2p::config::GetOption("logfile", logfile); - std::string loglevel = ""; i2p::config::GetOption("loglevel", loglevel); - - if (isDaemon && (logs == "" || logs == "stdout")) - logs = "file"; - - if (logs == "syslog") { - // use syslog only no stdout - StartSyslog(); - } else if (logs == "file") { - if (logfile == "") - logfile = i2p::fs::DataDirPath("i2pd.log"); - StartLog (logfile); - } else { - // use stdout - StartLog (""); - } - SetLogLevel(loglevel); - bool http; i2p::config::GetOption("http.enabled", http); if (http) { std::string httpAddr; i2p::config::GetOption("http.address", httpAddr); @@ -236,7 +237,6 @@ namespace i2p d.m_I2PControlService = nullptr; } i2p::crypto::TerminateCrypto (); - StopLog (); return true; } diff --git a/DaemonLinux.cpp b/DaemonLinux.cpp index 59c286be..e760b4f5 100644 --- a/DaemonLinux.cpp +++ b/DaemonLinux.cpp @@ -19,7 +19,7 @@ void handle_signal(int sig) { case SIGHUP: LogPrint(eLogInfo, "Daemon: Got SIGHUP, reopening log..."); - ReopenLogFile (); + i2p::log::Logger().Reopen (); break; case SIGABRT: case SIGTERM: diff --git a/DaemonWin32.cpp b/DaemonWin32.cpp index b28cf2cd..a6d91da4 100644 --- a/DaemonWin32.cpp +++ b/DaemonWin32.cpp @@ -75,7 +75,7 @@ namespace i2p i2p::config::SetOption("log", std::string ("file")); #endif bool ret = Daemon_Singleton::start(); - if (ret && IsLogToFile ()) + if (ret && i2p::log::Logger().GetLogType() == eLogFile) { // TODO: find out where this garbage to console comes from SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE); diff --git a/api.cpp b/api.cpp index 3e037c02..3bef3f8e 100644 --- a/api.cpp +++ b/api.cpp @@ -40,9 +40,9 @@ namespace api void StartI2P (std::shared_ptr logStream) { if (logStream) - StartLog (logStream); + i2p::log::Logger().SendTo (logStream); else - StartLog (i2p::fs::DataDirPath (i2p::fs::GetAppName () + ".log")); + i2p::log::Logger().SendTo (i2p::fs::DataDirPath (i2p::fs::GetAppName () + ".log")); LogPrint(eLogInfo, "API: starting NetDB"); i2p::data::netdb.Start(); LogPrint(eLogInfo, "API: starting Transports"); @@ -60,7 +60,6 @@ namespace api i2p::transport::transports.Stop(); LogPrint(eLogInfo, "API: stopping NetDB"); i2p::data::netdb.Stop(); - StopLog (); } void RunPeerTest ()