diff --git a/app/src/main/java/com/nbee/echolink/FileLoggingTree.java b/app/src/main/java/com/nbee/echolink/FileLoggingTree.java new file mode 100644 index 0000000..0bd077b --- /dev/null +++ b/app/src/main/java/com/nbee/echolink/FileLoggingTree.java @@ -0,0 +1,59 @@ +package com.nbee.echolink; + +import android.content.Context; +import android.util.Log; +import timber.log.Timber; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class FileLoggingTree extends Timber.DebugTree { + private final File logFile; + + public FileLoggingTree(Context context) { + File logDirectory = new File(context.getFilesDir(), "logs"); + if (!logDirectory.exists()) { + logDirectory.mkdirs(); + } + this.logFile = new File(logDirectory, "echoLink.log"); + } + + @Override + protected void log(int priority, String tag, String message, Throwable t) { + super.log(priority, tag, message, t); + + try (FileWriter fileWriter = new FileWriter(logFile, true)) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + String timestamp = dateFormat.format(new Date()); + String logMessage = timestamp + " [" + priorityToString(priority) + "] " + tag + ": " + message + "\n"; + fileWriter.append(logMessage); + + if (t != null) { + fileWriter.append(Log.getStackTraceString(t)).append("\n"); + } + } catch (IOException e) { + Log.e("FileLoggingTree", "Error writing log to file", e); + } + } + + private String priorityToString(int priority) { + switch (priority) { + case Log.ERROR: + return "ERROR"; + case Log.WARN: + return "WARN"; + case Log.INFO: + return "INFO"; + case Log.DEBUG: + return "DEBUG"; + case Log.VERBOSE: + return "VERBOSE"; + default: + return "UNKNOWN"; + } + } +}