diff --git a/core/java/src/net/i2p/util/LogLimit.java b/core/java/src/net/i2p/util/LogLimit.java index d26e4bc0c8..55bd074ab0 100644 --- a/core/java/src/net/i2p/util/LogLimit.java +++ b/core/java/src/net/i2p/util/LogLimit.java @@ -29,6 +29,10 @@ class LogLimit { public int getLimit() { return _limit; } + + public void setLimit(int limit) { + _limit = limit; + } public boolean matches(Log log) { String name = log.getName(); diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 92f73fee35..81a61d7e61 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -11,6 +11,7 @@ package net.i2p.util; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -19,6 +20,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import net.i2p.I2PAppContext; @@ -62,26 +64,45 @@ public class LogManager { private I2PAppContext _context; private Log _log; + /** when was the config file last read (or -1 if never) */ private long _configLastRead; + /** filename of the config file */ private String _location; + /** Ordered list of LogRecord elements that have not been written out yet */ private List _records; + /** List of explicit overrides of log levels (LogLimit objects) */ private List _limits; + /** String (scope) to Log object */ private Map _logs; + /** who clears and writes our records */ private LogWriter _writer; + /** + * default log level for logs that aren't explicitly controlled + * through a LogLimit in _limits + */ private int _defaultLimit; + /** Log record format string */ private char[] _format; + /** Date format instance */ private SimpleDateFormat _dateFormat; + /** Date format string (for the SimpleDateFormat instance) */ private String _dateFormatPattern; + /** log filename pattern */ private String _baseLogfilename; + /** max # bytes in the logfile before rotation */ private int _fileSize; + /** max # rotated logs */ private int _rotationLimit; + /** minimum log level to be displayed on stdout */ private int _onScreenLimit; + /** whether or not we even want to display anything on stdout */ private boolean _displayOnScreen; + /** how many records we want to buffer in the "recent logs" list */ private int _consoleBufferSize; - + /** the actual "recent logs" list */ private LogConsoleBuffer _consoleBuffer; public LogManager(I2PAppContext context) { @@ -264,7 +285,7 @@ public class LogManager { else _baseLogfilename = config.getProperty(PROP_FILENAME, DEFAULT_FILENAME); - _fileSize = getFilesize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE)); + _fileSize = getFileSize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE)); _rotationLimit = -1; try { String str = config.getProperty(PROP_ROTATIONLIMIT); @@ -297,15 +318,28 @@ public class LogManager { } private void parseLimits(Properties config) { + parseLimits(config, PROP_RECORD_PREFIX); + } + private void parseLimits(Properties config, String recordPrefix) { synchronized (_limits) { _limits.clear(); } - for (Iterator iter = config.keySet().iterator(); iter.hasNext();) { - String key = (String) iter.next(); - String val = config.getProperty(key); - if (key.startsWith(PROP_RECORD_PREFIX)) { - String name = key.HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Connection: close Transfer-Encoding: chunked Cache-Control: max-age=0, private, must-revalidate, no-transform X-Frame-Options: SAMEORIGIN Date: Wed, 23 Jul 2025 08:51:45 GMT X-Cache-Status: HIT X-Cache-Age: 0 2951 diff --git a/core/java/src/net/i2p/util/LogLimit.java b/core/java/src/net/i2p/util/LogLimit.java index d26e4bc0c8..55bd074ab0 100644 --- a/core/java/src/net/i2p/util/LogLimit.java +++ b/core/java/src/net/i2p/util/LogLimit.java @@ -29,6 +29,10 @@ class LogLimit { public int getLimit() { return _limit; } + + public void setLimit(int limit) { + _limit = limit; + } public boolean matches(Log log) { String name = log.getName(); diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 92f73fee35..81a61d7e61 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -11,6 +11,7 @@ package net.i2p.util; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -19,6 +20,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import net.i2p.I2PAppContext; @@ -62,26 +64,45 @@ public class LogManager { private I2PAppContext _context; private Log _log; + /** when was the config file last read (or -1 if never) */ private long _configLastRead; + /** filename of the config file */ private String _location; + /** Ordered list of LogRecord elements that have not been written out yet */ private List _records; + /** List of explicit overrides of log levels (LogLimit objects) */ private List _limits; + /** String (scope) to Log object */ private Map _logs; + /** who clears and writes our records */ private LogWriter _writer; + /** + * default log level for logs that aren't explicitly controlled + * through a LogLimit in _limits + */ private int _defaultLimit; + /** Log record format string */ private char[] _format; + /** Date format instance */ private SimpleDateFormat _dateFormat; + /** Date format string (for the SimpleDateFormat instance) */ private String _dateFormatPattern; + /** log filename pattern */ private String _baseLogfilename; + /** max # bytes in the logfile before rotation */ private int _fileSize; + /** max # rotated logs */ private int _rotationLimit; + /** minimum log level to be displayed on stdout */ private int _onScreenLimit; + /** whether or not we even want to display anything on stdout */ private boolean _displayOnScreen; + /** how many records we want to buffer in the "recent logs" list */ private int _consoleBufferSize; - + /** the actual "recent logs" list */ private LogConsoleBuffer _consoleBuffer; public LogManager(I2PAppContext context) { @@ -264,7 +285,7 @@ public class LogManager { else _baseLogfilename = config.getProperty(PROP_FILENAME, DEFAULT_FILENAME); - _fileSize = getFilesize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE)); + _fileSize = getFileSize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE)); _rotationLimit = -1; try { String str = config.getProperty(PROP_ROTATIONLIMIT); @@ -297,15 +318,28 @@ public class LogManager { } private void parseLimits(Properties config) { + parseLimits(config, PROP_RECORD_PREFIX); + } + private void parseLimits(Properties config, String recordPrefix) { synchronized (_limits) { _limits.clear(); } - for (Iterator iter = config.keySet().iterator(); iter.hasNext();) { - String key = (String) iter.next(); - String val = config.getProperty(key); - if (key.startsWith(PROP_RECORD_PREFIX)) { - String name = key. 0