Changeset a23ea5e


Ignore:
Timestamp:
Oct 7, 2010 6:39:03 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
500f6cf
Parents:
86a7d68
Message:
  • configlogging.jsp:
    • Add easy way to add an override
    • Make file size specifier more flexible
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java

    r86a7d68 ra23ea5e  
    1818    private String _dateFormat;
    1919    private String _fileSize;
     20    private String _newLogClass;
     21    private String _newLogLevel = "WARN";
    2022   
    2123    @Override
     
    2729        }
    2830    }
    29    
     31
    3032    public void setShouldsave(String moo) { _shouldSave = true; }
    3133   
     
    4850        _fileSize = (size != null ? size.trim() : null);
    4951    }
     52
     53    /** @since 0.8.1 */
     54    public void setNewlogclass(String s) {
     55        if (s != null && s.length() > 0)
     56            _newLogClass = s;
     57    }
     58   
     59    /** @since 0.8.1 */
     60    public void setNewloglevel(String s) {
     61        if (s != null)
     62            _newLogLevel = s;
     63    }
    5064   
    5165    /**
     
    5771        boolean shouldSave = false;
    5872       
    59         if (_levels != null) {
     73        if (_levels != null || _newLogClass != null) {
    6074            try {
    6175                Properties props = new Properties();
    62                 props.load(new ByteArrayInputStream(_levels.getBytes()));
     76                if (_levels != null)
     77                    props.load(new ByteArrayInputStream(_levels.getBytes()));
     78                if (_newLogClass != null)
     79                    props.setProperty(_newLogClass, _newLogLevel);
    6380                _context.logManager().setLimits(props);
    6481                shouldSave = true;
    65                 addFormNotice("Log limits updated");
     82                addFormNotice(_("Log overrides updated"));
    6683            } catch (IOException ioe) {
     84                // shouldn't ever happen (BAIS shouldnt cause an IOE)
    6785                _context.logManager().getLog(ConfigLoggingHandler.class).error("Error reading from the props?", ioe);
    6886                addFormError("Error updating the log limits - levels not valid");
     
    84102        }
    85103       
    86         if (_dateFormat != null) {
     104        if (_dateFormat != null && !_dateFormat.equals(_context.logManager().getDateFormatPattern())) {
    87105            boolean valid = _context.logManager().setDateFormat(_dateFormat);
    88106            if (valid) {
     
    140158
    141159            if (saved)
    142                 addFormNotice("Log configuration saved and applied successfully");
     160                addFormNotice(_("Log configuration saved"));
    143161            else
    144162                addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java

    r86a7d68 ra23ea5e  
    11package net.i2p.router.web;
    22
     3import java.util.List;
    34import java.util.Iterator;
    45import java.util.Properties;
     6import java.util.Set;
    57import java.util.TreeSet;
    68
     9import net.i2p.data.DataHelper;
     10import net.i2p.util.Log;
    711
    812public class ConfigLoggingHelper extends HelperBase {
     
    2024    public String getMaxFileSize() {
    2125        int bytes = _context.logManager().getFileSize();
    22         if (bytes == 0) return "1m";
    23         if (bytes > 1024*1024*1024)
    24             return (bytes/(1024*1024*1024)) + "g";
    25         else if (bytes > 1024*1024)
    26             return (bytes/(1024*1024)) + "m";
    27         else
    28             return (bytes/(1024)) + "k";
     26        if (bytes <= 0) return "1 MB";
     27        return DataHelper.formatSize2(bytes) + 'B';
    2928    }
    3029    public String getLogLevelTable() {
    3130        StringBuilder buf = new StringBuilder(32*1024);
    3231        Properties limits = _context.logManager().getLimits();
    33         TreeSet sortedLogs = new TreeSet();
     32        TreeSet<String> sortedLogs = new TreeSet();
    3433        for (Iterator iter = limits.keySet().iterator(); iter.hasNext(); ) {
    3534            String prefix = (String)iter.next();
     
    4746        buf.append("<i>" + _("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN") + "</i><br>");
    4847        buf.append("<i>" + _("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT") + "</i>\n");
     48
     49      /****
     50        // this is too big and ugly
     51        if (limits.size() <= 0)
     52            return "";
     53        buf.append("<table>");
     54        for (String prefix : sortedLogs) {
     55            buf.append("<tr><td>").append(prefix).append("</td><td>");
     56            String level = limits.getProperty(prefix);
     57            buf.append(getLogLevelBox("level-" + prefix, level, true)).append("</td></tr>");
     58        }
     59        buf.append("</table>");
     60       ****/
     61
    4962        return buf.toString();
    5063    }
     
    5467    public String getDefaultLogLevelBox() {
    5568        String cur = _context.logManager().getDefaultLimit();
     69        return getLogLevelBox("defaultloglevel", cur, false);
     70    }
     71
     72    private String getLogLevelBox(String name, String cur, boolean showRemove) {
    5673        StringBuilder buf = new StringBuilder(128);
    57         buf.append("<select name=\"defaultloglevel\">\n");
     74        buf.append("<select name=\"").append(name).append("\">\n");
    5875       
    5976        for (int i = 0; i < levels.length; i++) {
    6077            String l = levels[i];
    61             buf.append("<option value=\"").append(l).append("\" ");
     78            buf.append("<option value=\"").append(l).append('\"');
    6279            if (l.equals(cur))
    63                 buf.append(" selected=\"true\" ");
     80                buf.append(" selected=\"true\"");
    6481            buf.append('>').append(_(l)).append("</option>\n");
    6582        }       
    6683       
     84        if (showRemove)
     85            buf.append("<option value=\"remove\">").append(_("Remove")).append("</option>");
    6786        buf.append("</select>\n");
    6887        return buf.toString();
    6988    }
     89
     90    /**
     91     *  All the classes the log manager knows about, except ones that
     92     *  already have overrides
     93     *  @since 0.8.1
     94     */
     95    public String getNewClassBox() {
     96        List<Log> logs = _context.logManager().getLogs();
     97        Set limits = _context.logManager().getLimits().keySet();
     98        TreeSet<String> sortedLogs = new TreeSet();
     99
     100        for (Log log : logs) {
     101            String name = log.getName();
     102            if (!limits.contains(name))
     103                sortedLogs.add(name);
     104
     105            // add higher classes of length 3 or more
     106            int dots = 0;
     107            int lastdot = -1;
     108            int nextdot = 0;
     109            while ((nextdot = name.indexOf('.', lastdot + 1)) > 0) {
     110                if (++dots >= 3) {
     111                    String subst = name.substring(0, nextdot);
     112                    if (!limits.contains(subst))
     113                        sortedLogs.add(subst);
     114                }
     115                lastdot = nextdot;
     116            }
     117        }
     118
     119        StringBuilder buf = new StringBuilder(65536);
     120        buf.append("<select name=\"newlogclass\">\n" +
     121                   "<option value=\"\" selected=\"true\">")
     122           .append(_("Select a class to add"))
     123           .append("</option>\n");
     124
     125        for (String l : sortedLogs) {
     126            buf.append("<option value=\"").append(l).append("\">")
     127               .append(l).append("</option>\n");
     128        }       
     129       
     130        buf.append("</select>\n");
     131        buf.append(getLogLevelBox("newloglevel", "WARN", false));
     132        return buf.toString();
     133    }
    70134}
  • apps/routerconsole/jsp/configlogging.jsp

    r86a7d68 ra23ea5e  
    4747        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log level overrides")%>:</b></td>
    4848          <td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
     49        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("New override")%>:</b></td>
     50          <td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
    4951        </tr><tr><td colspan="2"><hr></td>
    5052        </tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
  • core/java/src/net/i2p/util/LogManager.java

    r86a7d68 ra23ea5e  
    157157    }
    158158
    159     /** @deprecated unused */
     159    /** now used by ConfigLogingHelper */
    160160    public List<Log> getLogs() {
    161161        return new ArrayList(_logs.values());
     
    416416    /**
    417417     * Determine how many bytes are in the given formatted string (5m, 60g, 100k, etc)
    418      *
    419      */
    420     public int getFileSize(String size) {
    421         int sz = -1;
    422         try {
    423             String v = size;
    424             char mod = size.toUpperCase().charAt(size.length() - 1);
    425             if (!Character.isDigit(mod)) v = size.substring(0, size.length() - 1);
    426             int val = Integer.parseInt(v);
     418     * Size may be k, m, or g; a trailing b is ignored. Upper-case is allowed.
     419     * Spaces between the number and letter is are allowed.
     420     * The number may be in floating point.
     421     * 4096 min, 2 GB max (returns int)
     422     */
     423    public static int getFileSize(String size) {
     424        try {
     425            String v = size.trim().toUpperCase();
     426            if (v.length() < 2)
     427                return -1;
     428            if (v.endsWith("B"))
     429                v = v.substring(0, v.length() - 1);
     430            char mod = v.charAt(v.length() - 1);
     431            if (!Character.isDigit(mod)) v = v.substring(0, v.length() - 1);
     432            double val = Double.parseDouble(v);
    427433            switch (mod) {
    428434                case 'K':
     
    439445                    break;
    440446            }
    441             return val;
     447            if (val < 4096 || val > Integer.MAX_VALUE)
     448                return -1;
     449            return (int) val;
    442450        } catch (Throwable t) {
    443451            System.err.println("Error parsing config for filesize: [" + size + "]");
    444             t.printStackTrace();
    445452            return -1;
    446453        }
Note: See TracChangeset for help on using the changeset viewer.