diff --git a/apps/jetty/build.xml b/apps/jetty/build.xml
index 25fe356f43..8901d2fa40 100644
--- a/apps/jetty/build.xml
+++ b/apps/jetty/build.xml
@@ -114,7 +114,7 @@
debug="true" source="1.5" target="1.5"
destdir="./build/obj"
includeAntRuntime="false"
- classpath="./jettylib/commons-logging.jar:./jettylib/javax.servlet.jar:./jettylib/org.mortbay.jetty.jar:./jettylib/jetty-util.jar" >
+ classpath="../../core/java/build/i2p.jar:./jettylib/commons-logging.jar:./jettylib/javax.servlet.jar:./jettylib/org.mortbay.jetty.jar:./jettylib/jetty-util.jar" >
diff --git a/apps/jetty/java/src/net/i2p/jetty/I2PLogger.java b/apps/jetty/java/src/net/i2p/jetty/I2PLogger.java
new file mode 100644
index 0000000000..d249382fd4
--- /dev/null
+++ b/apps/jetty/java/src/net/i2p/jetty/I2PLogger.java
@@ -0,0 +1,168 @@
+// ========================================================================
+// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ========================================================================
+
+package net.i2p.jetty;
+
+import net.i2p.I2PAppContext;
+import net.i2p.util.Log;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.log.Logger;
+
+/**
+ * Modified from Jetty 6.1.26 StdErrLog.java and Slf4jLog.java
+ *
+ * Usage: org.mortbay.log.Log.setLog(new I2PLogger(ctx));
+ *
+ * @since Jetty 6
+ */
+public class I2PLogger implements Logger
+{
+ private final Log _log;
+
+ StringBuilder _buffer = new StringBuilder();
+
+ public I2PLogger(I2PAppContext ctx)
+ {
+ _log = ctx.logManager().getLog(Server.class);
+ if (System.getProperty("DEBUG") != null)
+ setDebugEnabled(true);
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return _log.shouldLog(Log.DEBUG);
+ }
+
+ public void setDebugEnabled(boolean enabled)
+ {
+ if (enabled)
+ _log.setMinimumPriority(Log.DEBUG);
+ else
+ // LogManager.getDefaultLimit() returns a String, not worth it
+ _log.setMinimumPriority(Log.ERROR);
+ }
+
+ public void info(String msg,Object arg0, Object arg1)
+ {
+ if (arg0 == null && arg1 == null) {
+ _log.info(msg);
+ } else if (_log.shouldLog(Log.INFO)) {
+ synchronized(_buffer) {
+ format(msg,arg0,arg1);
+ _log.info(_buffer.toString());
+ }
+ }
+ }
+
+ public void debug(String msg,Throwable th)
+ {
+ _log.debug(msg,th);
+ }
+
+ public void debug(String msg,Object arg0, Object arg1)
+ {
+ if (arg0 == null && arg1 == null) {
+ _log.debug(msg);
+ } else if (_log.shouldLog(Log.DEBUG)) {
+ synchronized(_buffer) {
+ format(msg,arg0,arg1);
+ _log.debug(_buffer.toString());
+ }
+ }
+ }
+
+ public void warn(String msg,Object arg0, Object arg1)
+ {
+ if (arg0 == null && arg1 == null) {
+ _log.warn(msg);
+ } else if (_log.shouldLog(Log.WARN)) {
+ synchronized(_buffer) {
+ format(msg,arg0,arg1);
+ _log.warn(_buffer.toString());
+ }
+ }
+ }
+
+ public void warn(String msg, Throwable th)
+ {
+ if (th instanceof RuntimeException || th instanceof Error)
+ _log.error(msg, th);
+ else
+ _log.warn(msg,th);
+ }
+
+ private void format(String msg, Object arg0, Object arg1)
+ {
+ int i0=msg==null?-1:msg.indexOf("{}");
+ int i1=i0<0?-1:msg.indexOf("{}",i0+2);
+
+ if (i0>=0)
+ {
+ format(msg.substring(0,i0));
+ format(String.valueOf(arg0==null?"null":arg0));
+
+ if (i1>=0)
+ {
+ format(msg.substring(i0+2,i1));
+ format(String.valueOf(arg1==null?"null":arg1));
+ format(msg.substring(i1+2));
+ }
+ else
+ {
+ format(msg.substring(i0+2));
+ if (arg1!=null)
+ {
+ _buffer.append(' ');
+ format(String.valueOf(arg1));
+ }
+ }
+ }
+ else
+ {
+ format(msg);
+ if (arg0!=null)
+ {
+ _buffer.append(' ');
+ format(String.valueOf(arg0));
+ }
+ if (arg1!=null)
+ {
+ _buffer.append(' ');
+ format(String.valueOf(arg1));
+ }
+ }
+ }
+
+ private void format(String msg)
+ {
+ if (msg == null)
+ _buffer.append("null");
+ else
+ _buffer.append(msg);
+ }
+
+ public Logger getLogger(String name)
+ {
+ return this;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "I2PLogger";
+ }
+
+
+}
diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index 0ce64a59d0..1d377e6f33 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -26,6 +26,7 @@
+
@@ -62,6 +63,7 @@
+
@@ -243,6 +245,7 @@
+
@@ -279,6 +282,7 @@
+
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
index 127a4805b5..7c057de5ef 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -20,6 +20,7 @@ import net.i2p.apps.systray.SysTray;
import net.i2p.data.Base32;
import net.i2p.data.DataHelper;
import net.i2p.desktopgui.Main;
+import net.i2p.jetty.I2PLogger;
import net.i2p.router.RouterContext;
import net.i2p.util.FileUtil;
import net.i2p.util.I2PAppThread;
@@ -49,6 +50,7 @@ import org.mortbay.jetty.servlet.ServletHandler;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.servlet.SessionHandler;
import org.mortbay.jetty.webapp.WebAppContext;
+import org.mortbay.log.Log;
import org.mortbay.thread.QueuedThreadPool;
import org.mortbay.thread.concurrent.ThreadPool;
@@ -219,6 +221,7 @@ public class RouterConsoleRunner {
if (!workDirCreated)
System.err.println("ERROR: Unable to create Jetty temporary work directory");
+ Log.setLog(new I2PLogger(I2PAppContext.getGlobalContext()));
// so Jetty can find WebAppConfiguration
System.setProperty("jetty.class.path", I2PAppContext.getGlobalContext().getBaseDir() + "/lib/routerconsole.jar");
_server = new Server();
diff --git a/build.xml b/build.xml
index 76ecc658ad..a5f9a98455 100644
--- a/build.xml
+++ b/build.xml
@@ -132,7 +132,7 @@
-
+