diff --git a/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java b/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java index 8d551e8b..f027e8ec 100644 --- a/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java +++ b/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java @@ -1,10 +1,5 @@ package com.orhanobut.logger; -import android.os.Environment; -import android.os.Handler; -import android.os.HandlerThread; - -import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; @@ -80,8 +75,6 @@ private String formatTag(String tag) { } public static final class Builder { - private static final int MAX_BYTES = 500 * 1024; // 500K averages to a 4000 lines per file - Date date; SimpleDateFormat dateFormat; LogStrategy logStrategy; @@ -118,13 +111,7 @@ public CsvFormatStrategy build() { dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS", Locale.UK); } if (logStrategy == null) { - String diskPath = Environment.getExternalStorageDirectory().getAbsolutePath(); - String folder = diskPath + File.separatorChar + "logger"; - - HandlerThread ht = new HandlerThread("AndroidFileLogger." + folder); - ht.start(); - Handler handler = new DiskLogStrategy.WriteHandler(ht.getLooper(), folder, MAX_BYTES); - logStrategy = new DiskLogStrategy(handler); + logStrategy = DiskLogStrategy.newBuilder().build(); } return new CsvFormatStrategy(this); } diff --git a/logger/src/main/java/com/orhanobut/logger/DiskLogStrategy.java b/logger/src/main/java/com/orhanobut/logger/DiskLogStrategy.java index 50d7acbd..950696c2 100644 --- a/logger/src/main/java/com/orhanobut/logger/DiskLogStrategy.java +++ b/logger/src/main/java/com/orhanobut/logger/DiskLogStrategy.java @@ -1,6 +1,8 @@ package com.orhanobut.logger; +import android.os.Environment; import android.os.Handler; +import android.os.HandlerThread; import android.os.Looper; import android.os.Message; @@ -16,6 +18,10 @@ public class DiskLogStrategy implements LogStrategy { private final Handler handler; + public static Builder newBuilder() { + return new Builder(); + } + public DiskLogStrategy(Handler handler) { this.handler = handler; } @@ -100,4 +106,45 @@ private File getLogFile(String folderName, String fileName) { return newFile; } } + + public static final class Builder { + private static final int MAX_BYTES = 500 * 1024; // 500K averages to a 4000 lines per file + + String directory; + HandlerThread ht; + Handler handler; + + private Builder() { + } + + public Builder directory(String directory) { + this.directory = directory; + return this; + } + + public Builder handlerThread(HandlerThread ht) { + this.ht = ht; + return this; + } + + public Builder handler(Handler handler) { + this.handler = handler; + return this; + } + + public DiskLogStrategy build() { + if (directory == null) { + String diskPath = Environment.getExternalStorageDirectory().getAbsolutePath(); + directory = diskPath + File.separatorChar + "logger"; + } + if (ht == null) { + ht = new HandlerThread("AndroidFileLogger." + directory); + ht.start(); + } + if (handler == null) { + handler = new DiskLogStrategy.WriteHandler(ht.getLooper(), directory, MAX_BYTES); + } + return new DiskLogStrategy(handler); + } + } } \ No newline at end of file