Console: Add jsps to view entire router.log and wrapper.log files

Add links to /logs
Add some headers to the history.txt jsp
javadocs
This commit is contained in:
zzz
2016-08-21 20:21:50 +00:00
parent b0789d45f3
commit afa5a193a7
9 changed files with 121 additions and 5 deletions

View File

@ -63,6 +63,7 @@ public class LocaleWebAppHandler extends HandlerWrapper
pathInContext = "/index.jsp";
} else if (pathInContext.indexOf("/", 1) < 0 &&
(!pathInContext.endsWith(".jsp")) &&
(!pathInContext.endsWith(".log")) &&
(!pathInContext.endsWith(".txt"))) {
// add .jsp to pages at top level
pathInContext += ".jsp";

View File

@ -75,7 +75,7 @@ public class LogsHelper extends HelperBase {
*/
public String getLogs() {
String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
return "<p>" + _t("File location") + ": <b><code>" + _context.logManager().currentFile() + "</code></b></p>" + str;
return "<p>" + _t("File location") + ": <a href=\"/router.log\">" + _context.logManager().currentFile() + "</a></p>" + str;
}
/**
@ -88,9 +88,11 @@ public class LogsHelper extends HelperBase {
/**
* Does not necessarily exist.
* @since 0.9.1
*
* @return non-null, doesn't necessarily exist
* @since 0.9.1, public since 0.9.27
*/
static File wrapperLogFile(I2PAppContext ctx) {
public static File wrapperLogFile(I2PAppContext ctx) {
File f = null;
if (ctx.hasWrapper()) {
String wv = System.getProperty("wrapper.version");
@ -129,7 +131,7 @@ public class LogsHelper extends HelperBase {
return "<p>" + _t("File not found") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p>";
} else {
str = str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
return "<p>" + _t("File location") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p><pre>" + str + "</pre>";
return "<p>" + _t("File location") + ": <a href=\"/wrapper.log\">" + f.getAbsolutePath() + "</a></p><pre>" + str + "</pre>";
}
}

View File

@ -1,4 +1,4 @@
<%
<%@page pageEncoding="UTF-8"%><%
/*
* USE CAUTION WHEN EDITING
* Trailing whitespace OR NEWLINE on the last line will cause
@ -8,6 +8,9 @@
*/
response.setContentType("text/plain");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setDateHeader("Expires", 0);
response.addHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate");
response.addHeader("Pragma", "no-cache");
String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath();
try {
net.i2p.util.FileUtil.readFile("history.txt", base, response.getOutputStream());

View File

@ -0,0 +1,46 @@
<%@page pageEncoding="UTF-8"%><%
/*
* USE CAUTION WHEN EDITING
* Trailing whitespace OR NEWLINE on the last line will cause
* IllegalStateExceptions !!!
*
* Do not tag this file for translation.
*/
net.i2p.I2PAppContext ctx = net.i2p.I2PAppContext.getGlobalContext();
net.i2p.util.LogManager mgr = ctx.logManager();
mgr.flush();
java.io.File f = new java.io.File(mgr.currentFile());
long length = f.length();
if (length <= 0 || !f.isFile()) {
response.sendError(404, "Not Found");
} else {
response.setContentType("text/plain");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setHeader("Content-Length", Long.toString(length));
response.setDateHeader("Expires", 0);
response.addHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate");
response.addHeader("Pragma", "no-cache");
java.io.InputStream in = null;
try {
in = new java.io.FileInputStream(f);
java.io.OutputStream bout = response.getOutputStream();
int read = 0;
byte buf[] = new byte[4*1024];
while ((read = in.read(buf)) != -1) {
bout.write(buf, 0, read);
}
} catch (java.io.IOException ioe) {
// prevent 'Committed' IllegalStateException from Jetty
if (!response.isCommitted()) {
response.sendError(403, ioe.toString());
} else {
// not an error, happens when the browser closes the stream
// Jetty doesn't log this
throw ioe;
}
} finally {
if (in != null)
try { in.close(); } catch (java.io.IOException ioe) {}
}
}
%>

View File

@ -0,0 +1,44 @@
<%@page pageEncoding="UTF-8"%><%
/*
* USE CAUTION WHEN EDITING
* Trailing whitespace OR NEWLINE on the last line will cause
* IllegalStateExceptions !!!
*
* Do not tag this file for translation.
*/
net.i2p.I2PAppContext ctx = net.i2p.I2PAppContext.getGlobalContext();
java.io.File f = net.i2p.router.web.LogsHelper.wrapperLogFile(ctx);
long length = f.length();
if (length <= 0 || !f.isFile()) {
response.sendError(404, "Not Found");
} else {
response.setContentType("text/plain");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setHeader("Content-Length", Long.toString(length));
response.setDateHeader("Expires", 0);
response.addHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate");
response.addHeader("Pragma", "no-cache");
java.io.InputStream in = null;
try {
in = new java.io.FileInputStream(f);
java.io.OutputStream bout = response.getOutputStream();
int read = 0;
byte buf[] = new byte[4*1024];
while ((read = in.read(buf)) != -1) {
bout.write(buf, 0, read);
}
} catch (java.io.IOException ioe) {
// prevent 'Committed' IllegalStateException from Jetty
if (!response.isCommitted()) {
response.sendError(403, ioe.toString());
} else {
// not an error, happens when the browser closes the stream
// Jetty doesn't log this
throw ioe;
}
} finally {
if (in != null)
try { in.close(); } catch (java.io.IOException ioe) {}
}
}
%>

View File

@ -43,6 +43,16 @@
<url-pattern>/history.txt</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>net.i2p.router.web.jsp.viewrouterlog_jsp</servlet-name>
<url-pattern>/router.log</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>net.i2p.router.web.jsp.viewwrapperlog_jsp</servlet-name>
<url-pattern>/wrapper.log</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30

View File

@ -37,6 +37,7 @@ class FileLogWriter extends LogWriter {
/**
* File may not exist or have old logs in it if not opened yet
* @return non-null
*/
public synchronized String currentFile() {
if (_currentFile != null)

View File

@ -264,6 +264,10 @@ public class LogManager implements Flushable {
loadConfig();
}
/**
* File may not exist or have old logs in it if not opened yet
* @return non-null
*/
public String currentFile() {
if (_writer == null)
return ("No log file created yet");

View File

@ -37,7 +37,12 @@ abstract class LogWriter implements Runnable {
_lastReadConfig = Clock.getInstance().now();
}
/**
* File may not exist or have old logs in it if not opened yet
* @return non-null
*/
public abstract String currentFile();
/**
* Write the provided LogRecord to the writer.
* @param rec the LogRecord to write.