IDEA-CR-39038: IDEA-201580 Infinite logging loop on IDEA shutdown if there's an exception during IDE close

This commit is contained in:
Svetlana.Zemlyanskaya
2018-11-08 15:49:22 +01:00
parent fe38d8cf2c
commit cd85108afd
2 changed files with 35 additions and 17 deletions
@@ -3,11 +3,10 @@ package com.intellij.diagnostic;
import com.intellij.diagnostic.VMOptions.MemoryKind;
import com.intellij.featureStatistics.fusCollectors.AppLifecycleUsageTriggerCollector;
import com.intellij.internal.statistic.eventLog.FeatureUsageLogger;
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationType;
import com.intellij.notification.Notifications;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.diagnostic.ErrorLogger;
@@ -19,8 +18,6 @@ import com.intellij.util.io.MappingFailedException;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author kir
@@ -40,6 +37,11 @@ public class DefaultIdeaErrorLogger implements ErrorLogger {
if (ourLoggerBroken) return false;
try {
final Application app = ApplicationManager.getApplication();
if (app.isDisposed() || app.isDisposeInProgress()) {
return false;
}
UpdateChecker.checkForUpdate(event);
boolean notificationEnabled = !DISABLED_VALUE.equals(System.getProperty(FATAL_ERROR_NOTIFICATION_PROPERTY, ENABLED_VALUE));
@@ -49,19 +51,7 @@ public class DefaultIdeaErrorLogger implements ErrorLogger {
boolean isOOM = getOOMErrorKind(event.getThrowable()) != null;
boolean isMappingFailed = !isOOM && event.getThrowable() instanceof MappingFailedException;
String key = "ide.error";
if(isOOM){
key+=".oom";
}
if(isMappingFailed){
key+=".mappingFailed";
}
FUSApplicationUsageTrigger.getInstance().trigger(AppLifecycleUsageTriggerCollector.class, key);
Map<String, Object> values = new HashMap<>();
values.put("oom",isOOM);
values.put("mappingFailed",isMappingFailed);
FeatureUsageLogger.INSTANCE.log("lifecycle", "ide.error", values);
AppLifecycleUsageTriggerCollector.onError(isOOM, isMappingFailed);
return notificationEnabled ||
showPluginError ||
@@ -1,13 +1,41 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.featureStatistics.fusCollectors;
import com.intellij.internal.statistic.eventLog.FeatureUsageLogger;
import com.intellij.internal.statistic.service.fus.collectors.ApplicationUsageTriggerCollector;
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger;
import com.intellij.openapi.diagnostic.Logger;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
public class AppLifecycleUsageTriggerCollector extends ApplicationUsageTriggerCollector {
private static final Logger LOG = Logger.getInstance("#com.intellij.featureStatistics.fusCollectors.AppLifecycleUsageTriggerCollector");
@NotNull
@Override
public String getGroupId() {
return "statistics.lifecycle.app";
}
public static void onError(boolean isOOM, boolean isMappingFailed) {
try {
String key = "ide.error";
if (isOOM) {
key += ".oom";
}
if (isMappingFailed) {
key += ".mappingFailed";
}
FUSApplicationUsageTrigger.getInstance().trigger(AppLifecycleUsageTriggerCollector.class, key);
Map<String, Object> values = new HashMap<>();
values.put("oom", isOOM);
values.put("mappingFailed", isMappingFailed);
FeatureUsageLogger.INSTANCE.log("lifecycle", "ide.error", values);
}
catch (Exception e) {
LOG.warn(e);
}
}
}