package net.i2p.router.web; import java.io.File; import java.util.List; import net.i2p.I2PAppContext; import net.i2p.util.FileUtil; import net.i2p.util.VersionComparator; import org.eclipse.jetty.server.Server; import org.tanukisoftware.wrapper.WrapperManager; public class LogsHelper extends HelperBase { private static final String LOCATION_AVAILABLE = "3.3.7"; /** @since 0.8.12 */ public String getJettyVersion() { return Server.getVersion(); } /** @since 0.8.13 */ public static String jettyVersion() { return Server.getVersion(); } /** * Does not call logManager.flush(); call getCriticalLogs() first to flush */ public String getLogs() { String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages()); return "

" + _("File location") + ": " + _context.logManager().currentFile() + "

" + str; } /** * Side effect - calls logManager.flush() */ public String getCriticalLogs() { _context.logManager().flush(); return formatMessages(_context.logManager().getBuffer().getMostRecentCriticalMessages()); } /** * Does not necessarily exist. * @since 0.9.1 */ static File wrapperLogFile(I2PAppContext ctx) { File f = null; if (ctx.hasWrapper()) { String wv = System.getProperty("wrapper.version"); if (wv != null && VersionComparator.comp(wv, LOCATION_AVAILABLE) >= 0) { try { f = WrapperManager.getWrapperLogFile(); } catch (Throwable t) {} } } if (f == null || !f.exists()) { // RouterLaunch puts the location here if no wrapper String path = System.getProperty("wrapper.logfile"); if (path != null) { f = new File(path); } else { // look in new and old places f = new File(System.getProperty("java.io.tmpdir"), "wrapper.log"); if (!f.exists()) f = new File(ctx.getBaseDir(), "wrapper.log"); } } return f; } public String getServiceLogs() { File f = wrapperLogFile(_context); String str = FileUtil.readTextFile(f.getAbsolutePath(), 250, false); if (str == null) return "

" + _("File not found") + ": " + f.getAbsolutePath() + "

"; else { str = str.replace("&", "&").replace("<", "<").replace(">", ">"); return "

" + _("File location") + ": " + f.getAbsolutePath() + "

" + str + "
"; } } /***** unused public String getConnectionLogs() { return formatMessages(_context.commSystem().getMostRecentErrorMessages()); } ******/ private final static String NL = System.getProperty("line.separator"); /** formats in reverse order */ private String formatMessages(List msgs) { if (msgs.isEmpty()) return "

" + _("No log messages") + "

"; boolean colorize = _context.getBooleanPropertyDefaultTrue("routerconsole.logs.color"); StringBuilder buf = new StringBuilder(16*1024); buf.append("\n"); return buf.toString(); } }