Ignore:
Timestamp:
2014-08-16T14:10:24+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #9435 - add last 10 error/warning messages to bug report

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/Main.java

    r7402 r7420  
    2323import java.util.Arrays;
    2424import java.util.Collection;
     25import java.util.Collections;
    2526import java.util.HashMap;
    2627import java.util.Iterator;
     
    7677import org.openstreetmap.josm.gui.help.HelpUtil;
    7778import org.openstreetmap.josm.gui.io.SaveLayersDialog;
     79import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
    7880import org.openstreetmap.josm.gui.layer.Layer;
    79 import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
    8081import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    8182import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
     
    215216    protected static final Map<String, Throwable> NETWORK_ERRORS = new HashMap<>();
    216217
     218    // First lines of last 10 error and warning messages, used for bug reports
     219    private static final List<String> ERRORS_AND_WARNINGS = Collections.<String>synchronizedList(new ArrayList<String>());
     220
    217221    /**
    218222     * Logging level (5 = trace, 4 = debug, 3 = info, 2 = warn, 1 = error, 0 = none).
     
    220224     */
    221225    public static int logLevel = 3;
     226
     227    private static void rememberWarnErrorMsg(String msg) {
     228        // Only remember first line of message
     229        int idx = msg.indexOf('\n');
     230        if (idx > 0) {
     231            ERRORS_AND_WARNINGS.add(msg.substring(0, idx));
     232        } else {
     233            ERRORS_AND_WARNINGS.add(msg);
     234        }
     235        // Only keep 10 lines to avoid memory leak
     236        while (ERRORS_AND_WARNINGS.size() > 10) {
     237            ERRORS_AND_WARNINGS.remove(0);
     238        }
     239    }
     240
     241    /**
     242     * Replies the first lines of last 10 error and warning messages, used for bug reports
     243     * @return the first lines of last 10 error and warning messages
     244     * @since 7420
     245     */
     246    public static final Collection<String> getLastErrorAndWarnings() {
     247        return Collections.unmodifiableList(ERRORS_AND_WARNINGS);
     248    }
    222249
    223250    /**
     
    231258        if (msg != null && !msg.isEmpty()) {
    232259            System.err.println(tr("ERROR: {0}", msg));
     260            rememberWarnErrorMsg("E: "+msg);
    233261        }
    234262    }
     
    243271        if (msg != null && !msg.isEmpty()) {
    244272            System.err.println(tr("WARNING: {0}", msg));
     273            rememberWarnErrorMsg("W: "+msg);
    245274        }
    246275    }
Note: See TracChangeset for help on using the changeset viewer.