//package org.acra.log;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import android.util.Log;
/**
* Responsible for delegating calls to the Android logging system.
*
* User: William
* Date: 17/07/11
* Time: 11:06 AM
*/
public final class NonAndroidLog {
// Not that it really matters but these levels match those used in Android.util.Log
public static final int VERBOSE = 2;
public static final int DEBUG = 3;
public static final int INFO = 4;
public static final int WARN = 5;
public static final int ERROR = 6;
//public static final int ASSERT = 7;
private int logLevel = VERBOSE;
private final PrintStream out = System.out;
/**
* Any log that is output at level less that the supplied logLevel will be ignored.
*
* The deault log level is {@link NonAndroidLog#VERBOSE}
*
*
* @param logLevel LogLevel to use to filter log output.
*/
public void setLogLevel(int logLevel) {
this.logLevel = logLevel;
}
public int v(String tag, String msg) {
if (logLevel <= VERBOSE) {
out.println(tag + " : " + msg);
}
return 0;
}
public int v(String tag, String msg, Throwable tr) {
if (logLevel <= VERBOSE) {
out.println(tag + " : " + msg);
tr.printStackTrace(out);
}
return 0;
}
public int d(String tag, String msg) {
if (logLevel <= DEBUG) {
out.println(tag + " : " + msg);
}
return 0;
}
public int d(String tag, String msg, Throwable tr) {
if (logLevel <= DEBUG) {
out.println(tag + " : " + msg);
tr.printStackTrace(out);
}
return 0;
}
public int i(String tag, String msg) {
if (logLevel <= INFO) {
out.println(tag + " : " + msg);
}
return 0;
}
public int i(String tag, String msg, Throwable tr) {
if (logLevel <= INFO) {
out.println(tag + " : " + msg);
tr.printStackTrace(out);
}
return 0;
}
public int w(String tag, String msg) {
if (logLevel <= WARN) {
out.println(tag + " : " + msg);
}
return 0;
}
public int w(String tag, String msg, Throwable tr) {
if (logLevel <= WARN) {
out.println(tag + " : " + msg);
tr.printStackTrace(out);
}
return 0;
}
//public native boolean isLoggable(java.lang.String tag, int level);
public int w(String tag, Throwable tr) {
return Log.w(tag, tr);
}
public int e(String tag, String msg) {
if (logLevel <= ERROR) {
out.println(tag + " : " + msg);
}
return 0;
}
public int e(String tag, String msg, Throwable tr) {
if (logLevel <= ERROR) {
out.println(tag + " : " + msg);
tr.printStackTrace(out);
}
return 0;
}
public String getStackTraceString(Throwable tr) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
Throwable cause = tr;
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
final String stacktraceAsString = result.toString();
printWriter.close();
return stacktraceAsString;
}
//public native int println(int priority, java.lang.String tag, java.lang.String msg);
}