package com.wouterbreukink.onedrive;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import java.io.Serializable;
import java.text.DecimalFormat;
public class LogUtils {
private LogUtils() {
}
public static String readableFileSize(double size) {
return readableFileSize((long) size);
}
public static String readableFileSize(long size) {
if (size <= 0) return "0";
final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
public static String readableTime(long ms) {
if (ms < 1000) {
return ms + "ms";
} else if (ms < 60000) {
return String.format("%.1fs", ms / 1000d);
} else {
long seconds = ms / 1000;
long s = seconds % 60;
long m = (seconds / 60) % 60;
long h = (seconds / (60 * 60)) % 24;
return String.format("%02d:%02d:%02d", h, m, s);
}
}
public static String addFileLogger(String logFile) {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
// Default log layout
Layout<? extends Serializable> layout =
PatternLayout.createLayout("%d %p [%t] %m%n", null, null, null, true, true, null, null);
// Create a new file appender for the given filename
FileAppender appender = FileAppender.createAppender(
logFile,
"false",
"false",
"FileAppender",
"false",
"true",
"true",
null,
layout,
null,
null,
null,
config);
appender.start();
((Logger) LogManager.getRootLogger()).addAppender(appender);
return appender.getFileName();
}
}