From d76676a68fbcaa01546ab2643764c7e1f79cc8a3 Mon Sep 17 00:00:00 2001 From: "Rui Zhao (renyuneyun)" Date: Sun, 17 Sep 2017 12:55:45 +0100 Subject: [PATCH] Allow to change disk log destination --- README.md | 13 ++++ .../orhanobut/logger/CsvFormatStrategy.java | 14 +---- .../com/orhanobut/logger/DiskLogStrategy.java | 63 +++++++++++++++++++ .../DiskLogStrategyTest.kt | 3 +- 4 files changed, 79 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 9dce5753..048177dd 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,19 @@ FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder() Logger.addLogAdapter(new DiskLogAdapter(formatStrategy)); ``` +Set custom logging destination +```java +LogStrategy logStrategy = DiskLogStrategy.newBuilder() + .directory("/sdcard/my/awesome/destination") + .build(); + +FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder() + .logStrategy(logStrategy) + .build(); + +Logger.addLogAdapter(new DiskLogAdapter(formatStrategy)); +``` + ### How it works diff --git a/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java b/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java index 57a0cedd..a8924adc 100644 --- a/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java +++ b/logger/src/main/java/com/orhanobut/logger/CsvFormatStrategy.java @@ -1,12 +1,8 @@ package com.orhanobut.logger; -import android.os.Environment; -import android.os.Handler; -import android.os.HandlerThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; @@ -88,8 +84,6 @@ private CsvFormatStrategy(@NonNull Builder builder) { } 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; @@ -126,13 +120,7 @@ private Builder() { 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 7d742d06..530f157e 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; import android.support.annotation.NonNull; @@ -22,6 +24,11 @@ public class DiskLogStrategy implements LogStrategy { @NonNull private final Handler handler; + @NonNull + public static Builder newBuilder() { + return new Builder(); + } + public DiskLogStrategy(@NonNull Handler handler) { this.handler = checkNotNull(handler); } @@ -113,4 +120,60 @@ private File getLogFile(@NonNull String folderName, @NonNull 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() { + } + + /** + * Set the log destination directory + * The default destination will be used if not supplied + */ + @NonNull public Builder directory(@NonNull String directory) { + this.directory = directory; + return this; + } + + /** + * Set the {@link HandlerThread} which handles this strategy + * A default {@link HandlerThread} will be created if not supplied + */ + @NonNull public Builder handlerThread(@NonNull HandlerThread ht) { + this.ht = ht; + return this; + } + + /** + * Set the {@link Handler} + * A default {@link Handler} will be created if not supplied + */ + @NonNull public Builder handler(@NonNull Handler handler) { + this.handler = handler; + return this; + } + + /** + * Create the {@link DiskLogStrategy} given the configuration + */ + @NonNull 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); + } + } } diff --git a/logger/src/test/java/com.orhanobut.logger/DiskLogStrategyTest.kt b/logger/src/test/java/com.orhanobut.logger/DiskLogStrategyTest.kt index b8c4acdd..74e20513 100644 --- a/logger/src/test/java/com.orhanobut.logger/DiskLogStrategyTest.kt +++ b/logger/src/test/java/com.orhanobut.logger/DiskLogStrategyTest.kt @@ -12,7 +12,8 @@ class DiskLogStrategyTest { @Test fun log() { val handler = mock(Handler::class.java) - val logStrategy = DiskLogStrategy(handler) + + val logStrategy = DiskLogStrategy.newBuilder().handler(handler).build() logStrategy.log(DEBUG, "tag", "message")