FUS: implement logger for uploading logs in external process (IDEA-228935)

GitOrigin-RevId: 3912317822b46133eedd1d84841445e7483fa140
This commit is contained in:
Svetlana.Zemlyanskaya
2020-01-29 18:22:18 +01:00
committed by intellij-monorepo-bot
parent 18794ecb76
commit 5463ca715b
4 changed files with 85 additions and 25 deletions

View File

@@ -12,5 +12,6 @@
<orderEntry type="library" name="gson" level="project" />
<orderEntry type="library" name="JDOM" level="project" />
<orderEntry type="library" name="http-client" level="project" />
<orderEntry type="library" name="Log4J" level="project" />
</component>
</module>

View File

@@ -1,24 +0,0 @@
// Copyright 2000-2020 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.internal.statistic.eventLog;
public class EmptyDataCollectorDebugLogger implements DataCollectorDebugLogger {
@Override
public void info(String message) {}
@Override
public void info(String message, Throwable t) {}
@Override
public void warn(String message) {}
@Override
public void warn(String message, Throwable t) {}
@Override
public void trace(String message) {}
@Override
public boolean isTraceEnabled() {
return false;
}
}

View File

@@ -17,7 +17,7 @@ public class EventLogUploader {
}
private static void execute(String[] args) {
DataCollectorDebugLogger logger = new EmptyDataCollectorDebugLogger();
DataCollectorDebugLogger logger = new ExternalDataCollectorLogger();
logger.info("Process started with '" + String.join(" ", args) + "'");
if (args.length == 0) {

View File

@@ -0,0 +1,83 @@
// Copyright 2000-2020 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.internal.statistic.uploader;
import com.intellij.internal.statistic.eventLog.DataCollectorDebugLogger;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
public class ExternalDataCollectorLogger implements DataCollectorDebugLogger {
@NonNls private final Logger myLogger;
public ExternalDataCollectorLogger() {
myLogger = Logger.getLogger("com.intellij.internal.statistic.uploader");
String logDirectory = findDirectory(1_000_000L);
if (logDirectory != null) {
String directory = new File(logDirectory, "idea_statistics_uploader.log").getAbsolutePath();
myLogger.addAppender(newAppender(directory));
myLogger.setLevel(Level.ALL);
}
}
@Nullable
public static String findDirectory(long requiredFreeSpace) {
String dir = System.getProperty("java.io.tmpdir");
if (dir != null && isValidDir(dir, requiredFreeSpace)) {
return dir;
}
return null;
}
private static boolean isValidDir(String path, long space) {
File dir = new File(path);
return dir.isDirectory() && dir.canWrite() && dir.getUsableSpace() >= space;
}
@NotNull
private static FileAppender newAppender(@NotNull String directory) {
@NonNls FileAppender appender = new FileAppender();
appender.setFile(directory);
appender.setLayout(new PatternLayout("%d{dd/MM HH:mm:ss} %-5p %C - %m%n"));
appender.setThreshold(Level.ALL);
appender.setAppend(false);
appender.activateOptions();
return appender;
}
@Override
public void info(String message) {
myLogger.info(message);
}
@Override
public void info(String message, Throwable t) {
myLogger.info(message, t);
}
@Override
public void warn(String message) {
myLogger.warn(message);
}
@Override
public void warn(String message, Throwable t) {
myLogger.warn(message, t);
}
@Override
public void trace(String message) {
myLogger.trace(message);
}
@Override
public boolean isTraceEnabled() {
return myLogger.isTraceEnabled();
}
}