Changeset 96f9618


Ignore:
Timestamp:
Aug 1, 2004 5:27:59 AM (16 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
bd78a66
Parents:
cf7be2d
git-author:
jrandom <jrandom> (08/01/04 05:27:59)
git-committer:
zzz <zzz@…> (08/01/04 05:27:59)
Message:

expose more data and let the settings be overridden during runtime (and saved to disk)

Location:
core/java/src/net/i2p/util
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/util/LogLimit.java

    rcf7be2d r96f9618  
    3030        return _limit;
    3131    }
     32   
     33    public void setLimit(int limit) {
     34        _limit = limit;
     35    }
    3236
    3337    public boolean matches(Log log) {
  • core/java/src/net/i2p/util/LogManager.java

    rcf7be2d r96f9618  
    1212import java.io.File;
    1313import java.io.FileInputStream;
     14import java.io.FileOutputStream;
    1415import java.io.IOException;
    1516import java.text.SimpleDateFormat;
     
    2021import java.util.Map;
    2122import java.util.Properties;
     23import java.util.TreeMap;
    2224
    2325import net.i2p.I2PAppContext;
     
    6365    private Log _log;
    6466   
     67    /** when was the config file last read (or -1 if never) */
    6568    private long _configLastRead;
    6669
     70    /** filename of the config file */
    6771    private String _location;
     72    /** Ordered list of LogRecord elements that have not been written out yet */
    6873    private List _records;
     74    /** List of explicit overrides of log levels (LogLimit objects) */
    6975    private List _limits;
     76    /** String (scope) to Log object */
    7077    private Map _logs;
     78    /** who clears and writes our records */
    7179    private LogWriter _writer;
    7280
     81    /**
     82     * default log level for logs that aren't explicitly controlled
     83     * through a LogLimit in _limits
     84     */
    7385    private int _defaultLimit;
     86    /** Log record format string */
    7487    private char[] _format;
     88    /** Date format instance */
    7589    private SimpleDateFormat _dateFormat;
     90    /** Date format string (for the SimpleDateFormat instance) */
    7691    private String _dateFormatPattern;
     92    /** log filename pattern */
    7793    private String _baseLogfilename;
     94    /** max # bytes in the logfile before rotation */
    7895    private int _fileSize;
     96    /** max # rotated logs */
    7997    private int _rotationLimit;
     98    /** minimum log level to be displayed on stdout */
    8099    private int _onScreenLimit;
    81100
     101    /** whether or not we even want to display anything on stdout */
    82102    private boolean _displayOnScreen;
     103    /** how many records we want to buffer in the "recent logs" list */
    83104    private int _consoleBufferSize;
    84    
     105    /** the actual "recent logs" list */
    85106    private LogConsoleBuffer _consoleBuffer;
    86107
     
    265286            _baseLogfilename = config.getProperty(PROP_FILENAME, DEFAULT_FILENAME);
    266287
    267         _fileSize = getFilesize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE));
     288        _fileSize = getFileSize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE));
    268289        _rotationLimit = -1;
    269290        try {
     
    298319
    299320    private void parseLimits(Properties config) {
     321        parseLimits(config, PROP_RECORD_PREFIX);
     322    }
     323    private void parseLimits(Properties config, String recordPrefix) {
    300324        synchronized (_limits) {
    301325            _limits.clear();
    302326        }
    303         for (Iterator iter = config.keySet().iterator(); iter.hasNext();) {
    304             String key = (String) iter.next();
    305             String val = config.getProperty(key);
    306             if (key.startsWith(PROP_RECORD_PREFIX)) {
    307                 String name = key.substring(PROP_RECORD_PREFIX.length());
    308                 LogLimit lim = new LogLimit(name, Log.getLevel(val));
     327        if (config != null) {
     328            for (Iterator iter = config.keySet().iterator(); iter.hasNext();) {
     329                String key = (String) iter.next();
     330                String val = config.getProperty(key);
     331
     332                // if we're filtering the records (e.g. logger.record.*) then
     333                // filter accordingly (stripping off that prefix for matches)
     334                if (recordPrefix != null) {
     335                    if (key.startsWith(recordPrefix)) {
     336                        key = key.substring(recordPrefix.length());
     337                    } else {
     338                        continue;
     339                    }
     340                }
     341
     342                LogLimit lim = new LogLimit(key, Log.getLevel(val));
    309343                //_log.debug("Limit found for " + name + " as " + val);
    310344                synchronized (_limits) {
     
    316350        updateLimits();
    317351    }
    318 
    319     private int getFilesize(String size) {
     352   
     353    /**
     354     * Update the existing limit overrides
     355     *
     356     * @param limits mapping of prefix to log level string (not the log #)
     357     */
     358    public void setLimits(Properties limits) {
     359        parseLimits(limits, null);
     360    }
     361   
     362    /**
     363     * Update the date format
     364     *
     365     * @return true if the format was updated, false if it was invalid
     366     */
     367    public boolean setDateFormat(String format) {
     368        if (format == null) return false;
     369       
     370        try {
     371            SimpleDateFormat fmt = new SimpleDateFormat(format);
     372            _dateFormatPattern = format;
     373            _dateFormat = fmt;
     374            return true;
     375        } catch (IllegalArgumentException iae) {
     376            getLog(LogManager.class).error("Date format is invalid [" + format + "]", iae);
     377            return false;
     378        }
     379    }
     380   
     381    /**
     382     * Update the log file size limit
     383     */
     384    public void setFileSize(int numBytes) {
     385        if (numBytes > 0)
     386            _fileSize = numBytes;
     387    }
     388   
     389    public String getDefaultLimit() { return Log.toLevelString(_defaultLimit); }
     390    public void setDefaultLimit(String lim) {
     391        _defaultLimit = Log.getLevel(lim);
     392        updateLimits();
     393    }
     394   
     395    /**
     396     * Return a mapping of the explicit overrides - path prefix to (text
     397     * formatted) limit.
     398     *
     399     */
     400    public Properties getLimits() {
     401        Properties rv = new Properties();
     402        synchronized (_limits) {
     403            for (int i = 0; i < _limits.size(); i++) {
     404                LogLimit lim = (LogLimit)_limits.get(i);
     405                rv.setProperty(lim.getRootName(), Log.toLevelString(lim.getLimit()));
     406            }
     407        }
     408        return rv;
     409    }
     410
     411    /**
     412     * Determine how many bytes are in the given formatted string (5m, 60g, 100k, etc)
     413     *
     414     */
     415    public int getFileSize(String size) {
    320416        int sz = -1;
    321417        try {
     
    399495        return _baseLogfilename;
    400496    }
     497   
     498    public void setBaseLogfilename(String filenamePattern) {
     499        _baseLogfilename = filenamePattern;
     500    }
    401501
    402502    public int getFileSize() {
     
    408508    }
    409509
     510    public boolean saveConfig() {
     511        String config = createConfig();
     512        FileOutputStream fos = null;
     513        try {
     514            fos = new FileOutputStream(_location);
     515            fos.write(config.getBytes());
     516            return true;
     517        } catch (IOException ioe) {
     518            getLog(LogManager.class).error("Error saving the config", ioe);
     519            return false;
     520        } finally {
     521            if (fos != null) try { fos.close(); } catch (IOException ioe) {}
     522        }
     523    }
     524   
     525    private String createConfig() {
     526        StringBuffer buf = new StringBuffer(8*1024);
     527        buf.append(PROP_FORMAT).append('=').append(new String(_format)).append('\n');
     528        buf.append(PROP_DATEFORMAT).append('=').append(_dateFormatPattern).append('\n');
     529        buf.append(PROP_DISPLAYONSCREEN).append('=').append((_displayOnScreen ? "TRUE" : "FALSE")).append('\n');
     530        String filenameOverride = _context.getProperty(FILENAME_OVERRIDE_PROP);
     531        if (filenameOverride == null)
     532            buf.append(PROP_FILENAME).append('=').append(_baseLogfilename).append('\n');
     533        else // this isn't technically correct - this could mess with some funky scenarios
     534            buf.append(PROP_FILENAME).append('=').append(DEFAULT_FILENAME).append('\n');
     535       
     536        if (_fileSize >= 1024*1024)
     537            buf.append(PROP_FILESIZE).append('=').append( (_fileSize / (1024*1024))).append("m\n");
     538        else if (_fileSize >= 1024)
     539            buf.append(PROP_FILESIZE).append('=').append( (_fileSize / (1024))).append("k\n");
     540        else if (_fileSize > 0)
     541            buf.append(PROP_FILESIZE).append('=').append(_fileSize).append('\n');
     542        // if <= 0, dont specify
     543       
     544        buf.append(PROP_ROTATIONLIMIT).append('=').append(_rotationLimit).append('\n');
     545        buf.append(PROP_DEFALTLEVEL).append('=').append(Log.toLevelString(_defaultLimit)).append('\n');
     546        buf.append(PROP_DISPLAYONSCREENLEVEL).append('=').append(Log.toLevelString(_onScreenLimit)).append('\n');
     547        buf.append(PROP_CONSOLEBUFFERSIZE).append('=').append(_consoleBufferSize).append('\n');
     548
     549        buf.append("# log limit overrides:\n");
     550       
     551        TreeMap limits = new TreeMap();
     552        synchronized (_limits) {
     553            for (int i = 0; i < _limits.size(); i++) {
     554                LogLimit lim = (LogLimit)_limits.get(i);
     555                limits.put(lim.getRootName(), Log.toLevelString(lim.getLimit()));
     556            }
     557        }
     558        for (Iterator iter = limits.keySet().iterator(); iter.hasNext(); ) {
     559            String path = (String)iter.next();
     560            String lim = (String)limits.get(path);
     561            buf.append(PROP_RECORD_PREFIX).append(path);
     562            buf.append('=').append(lim).append('\n');
     563        }
     564       
     565        return buf.toString();
     566    }
     567
     568   
    410569    //List _getRecords() { return _records; }
    411570    List _removeAll() {
     
    422581    public char[] getFormat() {
    423582        return _format;
     583    }
     584   
     585    public void setFormat(char fmt[]) {
     586        _format = fmt;
    424587    }
    425588
Note: See TracChangeset for help on using the changeset viewer.