diff --git a/source/de/anomic/http/httpTemplate.java b/source/de/anomic/http/httpTemplate.java index 165f4d067..73ac0c11a 100644 --- a/source/de/anomic/http/httpTemplate.java +++ b/source/de/anomic/http/httpTemplate.java @@ -55,6 +55,7 @@ import java.io.File; import java.util.Hashtable; import de.anomic.server.serverFileUtils; +import de.anomic.server.logging.serverLog; /** * A template engine, which substitutes patterns in strings
@@ -355,9 +356,8 @@ public final class httpTemplate { include+=line+de.anomic.server.serverCore.crlfString; } }catch(IOException e){ - //file not found? - System.err.println("Include Error with file: "+filename); - //e.printStackTrace(); + //file not found? + serverLog.logError("FILEHANDLER","Include Error with file: "+filename); } PushbackInputStream pis2 = new PushbackInputStream(new ByteArrayInputStream(include.getBytes())); writeTemplate(pis2, out, pattern, dflt, prefix); diff --git a/source/de/anomic/http/httpd.java b/source/de/anomic/http/httpd.java index 8c1a1ab2f..b597f582e 100644 --- a/source/de/anomic/http/httpd.java +++ b/source/de/anomic/http/httpd.java @@ -245,7 +245,7 @@ public final class httpd implements serverHandler { public String error(Throwable e) { // OBLIGATORIC FUNCTION // return string in case of any error that occurs during communication // is always (but not only) called if an IO-dependent exception occurrs. - e.printStackTrace(); + this.log.logError("Unexpected Error. " + e.getClass().getName(),e); return "501 Exception occurred: " + e.getMessage(); } @@ -507,9 +507,8 @@ public final class httpd implements serverHandler { return this.prop.getProperty(CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (Exception e) { - String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); - System.err.println("PROXY: " + errorMsg); - this.log.logError(errorMsg); + String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); + this.log.logError(errorMsg,e); return serverCore.TERMINATE_CONNECTION; } } @@ -560,9 +559,8 @@ public final class httpd implements serverHandler { } return this.prop.getProperty(CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (Exception e) { - String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); - System.err.println("PROXY: " + errorMsg); - this.log.logError(errorMsg); + String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); + this.log.logError(errorMsg,e); return serverCore.TERMINATE_CONNECTION; } } @@ -632,8 +630,7 @@ public final class httpd implements serverHandler { return this.prop.getProperty(CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (Exception e) { String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); - System.err.println("PROXY: " + errorMsg); - this.log.logError(errorMsg); + this.log.logError(errorMsg,e); return serverCore.TERMINATE_CONNECTION; } } diff --git a/source/de/anomic/http/httpdFileHandler.java b/source/de/anomic/http/httpdFileHandler.java index 1426a60ff..5072e912d 100644 --- a/source/de/anomic/http/httpdFileHandler.java +++ b/source/de/anomic/http/httpdFileHandler.java @@ -123,6 +123,8 @@ public final class httpdFileHandler extends httpdAbstractHandler implements http private Properties connectionProperties = null; private MessageDigest md5Digest = null; + private final serverLog theLogger = new serverLog("FILEHANDLER"); + public httpdFileHandler(serverSwitch switchboard) { this.switchboard = switchboard; @@ -416,12 +418,11 @@ public final class httpdFileHandler extends httpdAbstractHandler implements http tp.put("uptime", ((System.currentTimeMillis() - Long.parseLong(switchboard.getConfig("startupTime","0"))) / 1000) / 60); // uptime in minutes //System.out.println("respond props: " + ((tp == null) ? "null" : tp.toString())); // debug } catch (InvocationTargetException e) { - System.out.println("INTERNAL ERROR: " + e.toString() + ":" + + this.theLogger.logError("INTERNAL ERROR: " + e.toString() + ":" + e.getMessage() + " target exception at " + rc + ": " + e.getTargetException().toString() + ":" + - e.getTargetException().getMessage()); - e.printStackTrace(); + e.getTargetException().getMessage(),e); rc = null; } filedate = new Date(System.currentTimeMillis()); @@ -483,7 +484,7 @@ public final class httpdFileHandler extends httpdAbstractHandler implements http } catch (Exception e) { //textMessage(out, 503, "Exception with query: " + path + "; '" + e.toString() + ":" + e.getMessage() + "'\r\n"); //e.printStackTrace(); - System.out.println("ERROR: Exception with query: " + path + "; '" + e.toString() + ":" + e.getMessage() + "'\r\n"); + this.theLogger.logError("ERROR: Exception with query: " + path + "; '" + e.toString() + ":" + e.getMessage() + "'",e); } out.flush(); if (!(requestHeader.get(httpHeader.CONNECTION, "close").equals("keep-alive"))) { diff --git a/source/de/anomic/http/httpdProxyHandler.java b/source/de/anomic/http/httpdProxyHandler.java index 8347802aa..6a4c757a3 100644 --- a/source/de/anomic/http/httpdProxyHandler.java +++ b/source/de/anomic/http/httpdProxyHandler.java @@ -455,9 +455,8 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt } } catch (Exception e) { - String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); - System.err.println("PROXY: " + errorMsg); - this.theLogger.logError(errorMsg); + String errorMsg = "Unexpected Error. " + e.getClass().getName() + ": " + e.getMessage(); + this.theLogger.logError(errorMsg,e); } finally { respond.flush(); if (respond instanceof httpdByteCountOutputStream) ((httpdByteCountOutputStream)respond).finish(); @@ -693,12 +692,12 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt if (cacheFile.exists()) cacheFile.delete(); if (e.getMessage().indexOf("Corrupt GZIP trailer") >= 0) { // just do nothing, we leave it this way - this.theLogger.logDebug("ignoring bad gzip trail for URL " + url + " (" + e.getMessage() + ")"); + this.theLogger.logDebug("ignoring bad gzip trail for URL " + url + " (" + e.getMessage() + ")",e); conProp.put(httpd.CONNECTION_PROP_PERSISTENT,"close"); } else { if (!conProp.containsKey(httpd.CONNECTION_PROP_PROXY_RESPOND_HEADER)) { httpd.sendRespondError(conProp,respond,4,404,null,"client unexpectedly closed connection",e); - this.theLogger.logDebug("IOError for URL " + url + " (" + e.getMessage() + ") - responded 404"); + this.theLogger.logDebug("IOError for URL " + url + " (" + e.getMessage() + ") - responded 404",e); } else { conProp.put(httpd.CONNECTION_PROP_PERSISTENT,"close"); } diff --git a/source/de/anomic/plasma/plasmaCrawlWorker.java b/source/de/anomic/plasma/plasmaCrawlWorker.java index d6ba03ebe..e8804add4 100644 --- a/source/de/anomic/plasma/plasmaCrawlWorker.java +++ b/source/de/anomic/plasma/plasmaCrawlWorker.java @@ -425,8 +425,7 @@ public final class plasmaCrawlWorker extends Thread { } catch (Exception e) { // this may happen if the targeted host does not exist or anything with the // remote server was wrong. - log.logError("CRAWLER LOADER ERROR2 with url=" + url.toString() + ": " + e.toString()); - e.printStackTrace(); + log.logError("CRAWLER LOADER ERROR2 with url=" + url.toString() + ": " + e.toString(),e); } finally { if (remote != null) httpc.returnInstance(remote); } diff --git a/source/de/anomic/plasma/plasmaHTCache.java b/source/de/anomic/plasma/plasmaHTCache.java index 427afb943..d295cef2a 100644 --- a/source/de/anomic/plasma/plasmaHTCache.java +++ b/source/de/anomic/plasma/plasmaHTCache.java @@ -97,8 +97,7 @@ public final class plasmaHTCache { public plasmaHTCache(plasmaSwitchboard switchboard, int bufferkb) { this.switchboard = switchboard; - int loglevel = Integer.parseInt(switchboard.getConfig("plasmaLoglevel", "2")); - this.log = new serverLog("HTCACHE", loglevel); + this.log = new serverLog("HTCACHE"); // set cache path cachePath = new File(switchboard.getRootPath(),switchboard.getConfig("proxyCache","HTCACHE")); diff --git a/source/de/anomic/plasma/plasmaSwitchboard.java b/source/de/anomic/plasma/plasmaSwitchboard.java index 246017013..d530320e1 100644 --- a/source/de/anomic/plasma/plasmaSwitchboard.java +++ b/source/de/anomic/plasma/plasmaSwitchboard.java @@ -106,7 +106,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; @@ -117,7 +116,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; -import java.util.TreeMap; import java.util.Set; import java.util.TreeSet; import java.util.Vector; @@ -125,24 +123,19 @@ import java.util.Vector; import de.anomic.data.messageBoard; import de.anomic.data.wikiBoard; import de.anomic.htmlFilter.htmlFilterContentScraper; -import de.anomic.htmlFilter.htmlFilterOutputStream; import de.anomic.http.httpHeader; -import de.anomic.http.httpc; import de.anomic.kelondro.kelondroException; import de.anomic.kelondro.kelondroMSetTools; -import de.anomic.kelondro.kelondroMScoreCluster; import de.anomic.kelondro.kelondroTables; import de.anomic.server.serverAbstractSwitch; import de.anomic.server.serverCodings; import de.anomic.server.serverCore; import de.anomic.server.serverDate; -import de.anomic.server.serverFileUtils; -import de.anomic.server.serverThread; import de.anomic.server.serverInstantThread; -import de.anomic.server.logging.serverLog; import de.anomic.server.serverObjects; import de.anomic.server.serverSemaphore; import de.anomic.server.serverSwitch; +import de.anomic.server.logging.serverLog; import de.anomic.tools.bitfield; import de.anomic.tools.crypt; import de.anomic.yacy.yacyClient; @@ -198,8 +191,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser super(rootPath, initPath, configPath); // set loglevel and log - int loglevel = Integer.parseInt(getConfig("plasmaLoglevel", "2")); - setLog(new serverLog("PLASMA", loglevel)); + setLog(new serverLog("PLASMA")); // load values from configs plasmaPath = new File(rootPath, getConfig("dbPath", "PLASMADB")); diff --git a/source/de/anomic/server/logging/serverLog.java b/source/de/anomic/server/logging/serverLog.java index a62ffb437..0ab649140 100644 --- a/source/de/anomic/server/logging/serverLog.java +++ b/source/de/anomic/server/logging/serverLog.java @@ -44,23 +44,18 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.GregorianCalendar; -import java.util.LinkedList; -import java.util.TimeZone; -import java.util.logging.ConsoleHandler; -import java.util.logging.FileHandler; +import java.io.PrintStream; +import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; -import java.util.logging.StreamHandler; public final class serverLog { // // log-level categories public static final int LOGLEVEL_ZERO = Level.OFF.intValue(); // no output at all public static final int LOGLEVEL_FAILURE = Level.SEVERE.intValue(); // system-level error, internal cause, critical and not fixeable (i.e. inconsistency) - public static final int LOGLEVEL_ERROR = Level.SEVERE.intValue(); // exceptional error, catcheable and non-critical (i.e. file error) + public static final int LOGLEVEL_ERROR = 950; // exceptional error, catcheable and non-critical (i.e. file error) public static final int LOGLEVEL_WARNING = Level.WARNING.intValue(); // uncritical service failure, may require user activity (i.e. input required, wrong authorization) public static final int LOGLEVEL_SYSTEM = Level.CONFIG.intValue(); // regular system status information (i.e. start-up messages) public static final int LOGLEVEL_INFO = Level.INFO.intValue(); // regular action information (i.e. any httpd request URL) @@ -78,32 +73,31 @@ public final class serverLog { private final Logger theLogger; public serverLog(String appName) { - //this(appName, LOGLEVEL_DEBUG); this.theLogger = Logger.getLogger(appName); } - - public serverLog(String appName, int logLevel) { - this(appName); -// this.logLevel = logLevel; -// this.appName = appName; - } - - public serverLog(String appName, char logToken) { - this(appName); -// this(appName, t2l(logToken)); - } - - public void setLoglevel(int newLevel) { -// this.logLevel = newLevel; + + public void setLevel(Level newLevel) { + this.theLogger.setLevel(newLevel); } // class log messages public void logFailure(String message) {this.theLogger.severe(message);} + public void logFailure(String message, Throwable thrown) {this.theLogger.log(Level.SEVERE,message,thrown);} + public void logError(String message) {this.theLogger.severe(message);} + public void logError(String message, Throwable thrown) {this.theLogger.log(Level.SEVERE,message,thrown);} + public void logWarning(String message) {this.theLogger.warning(message);} + public void logWarning(String message, Throwable thrown) {this.theLogger.log(Level.WARNING,message,thrown);} + public void logSystem(String message) {this.theLogger.config(message);} + public void logSystem(String message, Throwable thrown) {this.theLogger.log(Level.CONFIG,message,thrown);} + public void logInfo(String message) {this.theLogger.info(message);} + public void logInfo(String message, Throwable thrown) {this.theLogger.log(Level.INFO,message,thrown);} + public void logDebug(String message) {this.theLogger.finest(message);} + public void logDebug(String message, Throwable thrown) {this.theLogger.log(Level.FINEST,message,thrown);} // static log messages: log everything @@ -111,12 +105,52 @@ public final class serverLog { Logger.getLogger(appName).log(Level.parse(Integer.toString(messageLevel)),message); } - public static void logFailure(String appName, String message) {Logger.getLogger(appName).severe(message);} - public static void logError(String appName, String message) {Logger.getLogger(appName).severe(message);} - public static void logWarning(String appName, String message) {Logger.getLogger(appName).warning(message);} - public static void logSystem(String appName, String message) {Logger.getLogger(appName).config(message);} - public static void logInfo(String appName, String message) {Logger.getLogger(appName).info(message);} - public static void logDebug(String appName, String message) {Logger.getLogger(appName).finest(message);} + private void log(Level level, String msg, Throwable thrown) { + this.theLogger.log(level, msg, thrown); + } + + public static void logFailure(String appName, String message) { + Logger.getLogger(appName).severe(message); + } + public static void logFailure(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.SEVERE,message,thrown); + } + + public static void logError(String appName, String message) { + Logger.getLogger(appName).severe(message); + } + public static void logError(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.SEVERE,message,thrown); + } + + public static void logWarning(String appName, String message) { + Logger.getLogger(appName).warning(message); + } + public static void logWarning(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.WARNING,message,thrown); + } + + public static void logSystem(String appName, String message) { + Logger.getLogger(appName).config(message); + } + public static void logSystem(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.CONFIG,message,thrown); + } + + public static void logInfo(String appName, String message) { + Logger.getLogger(appName).info(message); + } + public static void logInfo(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.INFO,message,thrown); + } + + public static void logDebug(String appName, String message) { + Logger.getLogger(appName).finest(message); + } + public static void logDebug(String appName, String message, Throwable thrown) { + Logger.getLogger(appName).log(Level.FINEST,message,thrown); + } + public static final void configureLogging(String homePath) throws SecurityException, FileNotFoundException, IOException { @@ -130,5 +164,8 @@ public final class serverLog { // generating the root logger Logger logger = Logger.getLogger(""); + +// System.setOut(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDOUT"),Level.FINEST))); +// System.setErr(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDERR"),Level.SEVERE))); } } diff --git a/source/de/anomic/server/logging/serverSimpleLogFormatter.java b/source/de/anomic/server/logging/serverSimpleLogFormatter.java index 92ccd069e..3ce03268b 100644 --- a/source/de/anomic/server/logging/serverSimpleLogFormatter.java +++ b/source/de/anomic/server/logging/serverSimpleLogFormatter.java @@ -69,14 +69,16 @@ public class serverSimpleLogFormatter extends SimpleFormatter { // adding the stack trace if available buffer.append(System.getProperty("line.separator")); if (record.getThrown() != null) { + StringWriter writer = null; try { - StringWriter writer = new StringWriter(); + writer = new StringWriter(); PrintWriter printer = new PrintWriter(writer); record.getThrown().printStackTrace(printer); - writer.close(); buffer.append(writer.toString()); } catch (Exception e) { buffer.append("Failed to get stack trace: " + e.getMessage()); + } finally { + if (writer != null) try {writer.close();} catch (Exception ex) {} } } return buffer.toString(); diff --git a/source/de/anomic/server/serverAbstractThread.java b/source/de/anomic/server/serverAbstractThread.java index 8270845ce..b0d4704e2 100644 --- a/source/de/anomic/server/serverAbstractThread.java +++ b/source/de/anomic/server/serverAbstractThread.java @@ -160,22 +160,28 @@ public abstract class serverAbstractThread extends Thread implements serverThrea } private final void logError(String text) { - if (log == null) - serverLog.logError("THREAD-CONTROL", text); - else - log.logError(text); + if (log == null) serverLog.logError("THREAD-CONTROL", text); + else log.logError(text); + } + + private final void logError(String text,Throwable thrown) { + if (log == null) serverLog.logError("THREAD-CONTROL", text, thrown); + else log.logError(text,thrown); } + private void logSystem(String text) { - if (log == null) - serverLog.logSystem("THREAD-CONTROL", text); - else - log.logSystem(text); + if (log == null) serverLog.logSystem("THREAD-CONTROL", text); + else log.logSystem(text); } + private void logSystem(String text, Throwable thrown) { + if (log == null) serverLog.logSystem("THREAD-CONTROL", text, thrown); + else log.logSystem(text,thrown); + } + public void jobExceptionHandler(Exception e) { // default handler for job exceptions. shall be overridden for own handler - logError("thread '" + this.getName() + "': " + e.toString()); - e.printStackTrace(); + logError("thread '" + this.getName() + "': " + e.toString(),e); } public void run() { diff --git a/source/de/anomic/server/serverCore.java b/source/de/anomic/server/serverCore.java index 1da5ea5af..71bf69879 100644 --- a/source/de/anomic/server/serverCore.java +++ b/source/de/anomic/server/serverCore.java @@ -170,7 +170,7 @@ public final class serverCore extends serverAbstractThread implements serverThre public serverCore(int port, int maxSessions, int timeout, boolean termSleepingThreads, boolean blockAttack, serverHandler handlerPrototype, serverSwitch switchboard, - int commandMaxLength, int logl) throws IOException { + int commandMaxLength) throws IOException { this.port = port; this.commandMaxLength = commandMaxLength; this.denyHost = (blockAttack) ? new Hashtable() : null; @@ -207,7 +207,7 @@ public final class serverCore extends serverAbstractThread implements serverThre this.maxSessions = maxSessions; this.timeout = timeout; this.termSleepingThreads = termSleepingThreads; - this.log = new serverLog("SERVER", logl); + this.log = new serverLog("SERVER"); } catch (java.lang.ClassNotFoundException e) { System.out.println("FATAL ERROR: " + e.getMessage() + " - Class Not Found"); System.exit(0); } diff --git a/source/de/anomic/yacy/yacyCore.java b/source/de/anomic/yacy/yacyCore.java index b7b123d6a..91f4afce6 100644 --- a/source/de/anomic/yacy/yacyCore.java +++ b/source/de/anomic/yacy/yacyCore.java @@ -133,7 +133,7 @@ public class yacyCore { switchboard.setConfig("yacyStatus",""); // set log level - log = new serverLog("YACY", Integer.parseInt(switchboard.getConfig("yacyLoglevel", "0"))); + log = new serverLog("YACY"); // create a yacy db yacyDBPath = new File(sb.getRootPath(), sb.getConfig("yacyDB", "DATA/YACYDB")); diff --git a/source/yacy.java b/source/yacy.java index f8217bb48..7519aecb2 100644 --- a/source/yacy.java +++ b/source/yacy.java @@ -176,7 +176,6 @@ public final class yacy { // read environment //new int port = Integer.parseInt(sb.getConfig("port", "8080")); - int httpdLoglevel = Integer.parseInt(sb.getConfig("httpdLoglevel", "2")); int timeout = Integer.parseInt(sb.getConfig("httpdTimeout", "60000")); if (timeout < 60000) timeout = 60000; int maxSessions = Integer.parseInt(sb.getConfig("httpdMaxSessions", "100")); @@ -277,8 +276,7 @@ public final class yacy { true /* block attacks (wrong protocol) */, protocolHandler /*command class*/, sb, - 30000 /*command max length incl. GET args*/, - httpdLoglevel /*loglevel*/); + 30000 /*command max length incl. GET args*/); server.setName("httpd:"+port); server.setPriority(Thread.MAX_PRIORITY); if (server == null) { @@ -321,8 +319,7 @@ public final class yacy { try { sb.waitForShutdown(); } catch (Exception e) { - serverLog.logError("MAIN CONTROL LOOP", "PANIK: " + e.getMessage()); - e.printStackTrace(); + serverLog.logError("MAIN CONTROL LOOP", "PANIK: " + e.getMessage(),e); } // shut down @@ -344,13 +341,11 @@ public final class yacy { sb.close(); } } catch (Exception e) { - serverLog.logError("STARTUP", "" + e); - e.printStackTrace(); + serverLog.logError("STARTUP", "Unexpected Error: " + e.getClass().getName(),e); //System.exit(1); } } catch (Exception ee) { - serverLog.logFailure("STARTUP", "FATAL ERROR: " + ee.getMessage()); - ee.printStackTrace(); + serverLog.logFailure("STARTUP", "FATAL ERROR: " + ee.getMessage(),ee); } serverLog.logSystem("SHUTDOWN", "goodbye. (this is the last line)"); try { @@ -630,7 +625,7 @@ class shutdownHookThread extends Thread this.mainThread.join(); } } catch (Exception e) { - e.printStackTrace(); + serverLog.logFailure("SHUTDOWN","Unexpected error. " + e.getClass().getName(),e); } } } diff --git a/yacy.init b/yacy.init index efcca02ca..328ac6824 100644 --- a/yacy.init +++ b/yacy.init @@ -107,20 +107,6 @@ mediaExt=ace,arj,asf,avi,bin,bz2,css,deb,doc,dmg,gif,gz,hqx,img,iso,jar,jpe,jpg, # other peer users promoteSearchPageGreeting = -# the log level, each for a specific software part -# loglevels are: -# NULL = 0: no output at all -# FAILURE = 1: system-level error, internal cause, critical and not fixeable (i.e. inconsistency) -# ERROR = 2: exceptional error, catcheable and non-critical (i.e. file error) -# WARNING = 3: uncritical service failure, may require user activity (i.e. input required, wrong authorization) -# SYSTEM = 4: regular system status information (i.e. start-up messages) -# INFO = 5: regular action information (i.e. any httpd request URL) -# DEBUG = 6: in-function status debug output -httpdLoglevel=4 -proxyLoglevel=5 -plasmaLoglevel=5 -yacyLoglevel=5 - # the path to the PLASMA database, especially the reverse word index dbPath=DATA/PLASMADB