diff --git a/webui/src/main/java/com/muwire/webui/I2PLogHandler.java b/webui/src/main/java/com/muwire/webui/I2PLogHandler.java new file mode 100644 index 00000000..5a8ee934 --- /dev/null +++ b/webui/src/main/java/com/muwire/webui/I2PLogHandler.java @@ -0,0 +1,53 @@ +package com.muwire.webui; + +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +import net.i2p.I2PAppContext; +import net.i2p.util.Log; + +class I2PLogHandler extends Handler { + + private final I2PAppContext ctx; + + I2PLogHandler(I2PAppContext ctx) { + this.ctx = ctx; + } + + @Override + public void publish(LogRecord record) { + String name = record.getLoggerName(); + Log log = ctx.logManager().getLog(name); + int priority = logPriority(record.getLevel()); + if (log.shouldLog(priority)) { + if (record.getThrown() == null) + log.log(priority, record.getMessage()); + else + log.log(priority, record.getMessage(), record.getThrown()); + } + } + + @Override + public void flush() { + ctx.logManager().flush(); + } + + @Override + public void close() throws SecurityException { + // ok what happens here? + } + + private static int logPriority(Level level) { + // this can be more exhaustive later + if (level == Level.FINE) + return Log.DEBUG; + if (level == Level.INFO) + return Log.INFO; + if (level == Level.WARNING) + return Log.WARN; + if (level == Level.SEVERE) + return Log.ERROR; + return Log.CRIT; + } +} diff --git a/webui/src/main/java/com/muwire/webui/MuWireClient.java b/webui/src/main/java/com/muwire/webui/MuWireClient.java index 79a4dc54..177f8ff4 100644 --- a/webui/src/main/java/com/muwire/webui/MuWireClient.java +++ b/webui/src/main/java/com/muwire/webui/MuWireClient.java @@ -6,7 +6,13 @@ import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; +import java.util.Enumeration; import java.util.Properties; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.LogRecord; +import java.util.logging.Logger; import com.muwire.core.Core; import com.muwire.core.MuWireSettings; @@ -15,6 +21,7 @@ import net.i2p.app.ClientAppManager; import net.i2p.app.ClientAppState; import net.i2p.router.RouterContext; import net.i2p.router.app.RouterApp; +import net.i2p.util.Log; public class MuWireClient { @@ -36,6 +43,17 @@ public class MuWireClient { if (needsMWInit()) return; + Enumeration loggerNames = LogManager.getLogManager().getLoggerNames(); + while(loggerNames.hasMoreElements()) { + String name = loggerNames.nextElement(); + Logger logger = LogManager.getLogManager().getLogger(name); + for (Handler h : logger.getHandlers()) { + logger.removeHandler(h); + h.close(); + } + logger.addHandler(new I2PLogHandler(ctx)); + } + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(mwProps), StandardCharsets.UTF_8)); Properties props = new Properties(); props.load(reader);