java/org/cef/misc/CefLog.java (131 lines of code) (raw):
package org.cef.misc;
import org.cef.CefSettings;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
// NOTE: java.util.Logger with FileHandler(CefSettings.log_file) doesn't work properly along with CEF-logging
// so use this separate primitive logger
// TODO: support log4j or similar
public class CefLog {
private static final boolean TRACE_THREAD = Boolean.getBoolean("jcef.log.trace_thread");
private static CefLog INSTANCE = new CefLog(System.err, Utils.getBoolean("jcef.log.verbose") ? CefSettings.LogSeverity.LOGSEVERITY_VERBOSE : CefSettings.LogSeverity.LOGSEVERITY_DISABLE);
private static volatile boolean isInitialized = false;
private static final SimpleDateFormat ourTimeFormat = new SimpleDateFormat("mm:ss:SSS");
private String myFilePath;
private PrintStream myPrintStream;
private CefSettings.LogSeverity mySeverity;
public static void initVerbose() {
String log_file = Utils.getString("jcef.log.path");
CefSettings.LogSeverity log_severity;
String level = Utils.getString("jcef.log.level", "verbose").toLowerCase(Locale.ENGLISH);
if (level.contains("dis"))
log_severity = CefSettings.LogSeverity.LOGSEVERITY_DISABLE;
else if (level.contains("info"))
log_severity = CefSettings.LogSeverity.LOGSEVERITY_INFO;
else if (level.contains("warn"))
log_severity = CefSettings.LogSeverity.LOGSEVERITY_WARNING;
else if (level.contains("err"))
log_severity = CefSettings.LogSeverity.LOGSEVERITY_ERROR;
else if (level.contains("fatal"))
log_severity = CefSettings.LogSeverity.LOGSEVERITY_FATAL;
else
log_severity = CefSettings.LogSeverity.LOGSEVERITY_VERBOSE;
init(log_file, log_severity, false);
}
public static void init(String log_file, CefSettings.LogSeverity log_severity) {
init(log_file, log_severity, false);
}
public static void init(String log_file, CefSettings.LogSeverity log_severity, boolean forceReinit) {
if (isInitialized) {
if (!forceReinit) {
if (INSTANCE != null)
Log(CefSettings.LogSeverity.LOGSEVERITY_VERBOSE,"CefLog is already initialized (severity=%s, path='%s'), new settings (severity=%s, path='%s') will be ignored.",
INSTANCE.mySeverity, INSTANCE.myFilePath, log_severity, log_file);
return;
}
System.out.println("Reinitialize CefLog.\n");
}
INSTANCE = null;
isInitialized = true;
if (log_severity == CefSettings.LogSeverity.LOGSEVERITY_DISABLE)
return;
CefSettings.LogSeverity severity = log_severity == null ? CefSettings.LogSeverity.LOGSEVERITY_INFO : log_severity;
boolean useStdOut = false; // stderr isn't buffered
if (log_file != null && !log_file.trim().isEmpty() && !log_file.trim().equalsIgnoreCase("null")) {
useStdOut = log_file.trim().equalsIgnoreCase("stdout");
if (!useStdOut) {
if (log_severity != CefSettings.LogSeverity.LOGSEVERITY_DEFAULT) {
try {
System.out.printf("JCEF(%s): initialized file logger, severity=%s, path='%s'\n", ourTimeFormat.format(new Date()), severity, log_file);
PrintStream ps = new PrintStream(new FileOutputStream(log_file, true), true);
INSTANCE = new CefLog(ps, severity);
INSTANCE.myFilePath = log_file;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return;
}
}
System.out.printf("JCEF(%s): initialized %s logger, severity=%s\n", ourTimeFormat.format(new Date()), useStdOut ? "stdout" : "stderr", severity);
INSTANCE = new CefLog(useStdOut ? System.out : System.err, severity);
}
private CefLog(PrintStream ps, CefSettings.LogSeverity log_severity) {
myPrintStream = ps;
mySeverity = log_severity;
}
private static String shortSeverity(CefSettings.LogSeverity log_severity) {
switch (log_severity) {
case LOGSEVERITY_DEFAULT:
return "D";
case LOGSEVERITY_VERBOSE:
return "V";
case LOGSEVERITY_INFO:
return "I";
case LOGSEVERITY_WARNING:
return "W";
case LOGSEVERITY_ERROR:
return "E";
case LOGSEVERITY_FATAL:
return "F";
case LOGSEVERITY_DISABLE:
return "d";
}
return "";
}
public void debug(String msg) { log(CefSettings.LogSeverity.LOGSEVERITY_VERBOSE, msg); }
public void info(String msg) { log(CefSettings.LogSeverity.LOGSEVERITY_INFO, msg); }
public void warn(String msg) { log(CefSettings.LogSeverity.LOGSEVERITY_WARNING, msg); }
public void error(String msg) { log(CefSettings.LogSeverity.LOGSEVERITY_ERROR, msg); }
public void debug(String msg, Object... args) { log(CefSettings.LogSeverity.LOGSEVERITY_VERBOSE, msg, args); }
public void info(String msg, Object... args) { log(CefSettings.LogSeverity.LOGSEVERITY_INFO, msg, args); }
public void warn(String msg, Object... args) { log(CefSettings.LogSeverity.LOGSEVERITY_WARNING, msg, args); }
public void error(String msg, Object... args) { log(CefSettings.LogSeverity.LOGSEVERITY_ERROR, msg, args); }
public void log(CefSettings.LogSeverity log_severity, String msg) {
log(log_severity, msg, null);
}
public void log(CefSettings.LogSeverity log_severity, String msg, Object... args) {
if (msg == null)
return;
if (mySeverity.compareTo(log_severity) <= 0) {
myPrintStream.printf("JCEF_%s(%s%s): %s\n", shortSeverity(log_severity), ourTimeFormat.format(new Date()),
TRACE_THREAD ? " | " + Thread.currentThread().getName() : "",
args == null || args.length == 0 ? msg : String.format(msg, args));
}
}
public boolean isDebugEnabled() { return mySeverity.compareTo(CefSettings.LogSeverity.LOGSEVERITY_VERBOSE) <= 0; }
public String getFilePath() { return myFilePath; }
public CefSettings.LogSeverity getLogLevel() { return mySeverity; }
static public void Debug(String msg, Object... args) { Log(CefSettings.LogSeverity.LOGSEVERITY_VERBOSE, msg, args); }
static public void Info(String msg, Object... args) { Log(CefSettings.LogSeverity.LOGSEVERITY_INFO, msg, args); }
static public void Warn(String msg, Object... args) { Log(CefSettings.LogSeverity.LOGSEVERITY_WARNING, msg, args); }
static public void Error(String msg, Object... args) { Log(CefSettings.LogSeverity.LOGSEVERITY_ERROR, msg, args); }
static public boolean IsDebugEnabled() { return INSTANCE != null ? INSTANCE.isDebugEnabled() : false; }
static public String GetFilePath() { return INSTANCE != null ? INSTANCE.myFilePath : null; }
static public CefSettings.LogSeverity GetLogLevel() { return INSTANCE != null ? INSTANCE.mySeverity : null; }
static public void Log(CefSettings.LogSeverity log_severity, String msg, Object... args) {
if (msg == null || INSTANCE == null)
return;
INSTANCE.log(log_severity, msg, args);
}
}