diff --git a/filelogger/src/main/java/abbasi/android/filelogger/FileLogger.kt b/filelogger/src/main/java/abbasi/android/filelogger/FileLogger.kt index 8d70200..5276dc4 100644 --- a/filelogger/src/main/java/abbasi/android/filelogger/FileLogger.kt +++ b/filelogger/src/main/java/abbasi/android/filelogger/FileLogger.kt @@ -8,6 +8,7 @@ package abbasi.android.filelogger import abbasi.android.filelogger.config.Config import abbasi.android.filelogger.config.FileRotationStrategy +import abbasi.android.filelogger.config.RetentionPolicy import abbasi.android.filelogger.file.FileWriter import abbasi.android.filelogger.file.LogFileManager import abbasi.android.filelogger.file.LogLevel @@ -143,20 +144,32 @@ object FileLogger { private fun openedFileWriter(): FileWriter { val strategy = config?.fileRotationStrategy - - if (strategy == null || strategy !is FileRotationStrategy.TimeBased) { - return fileWriter - } - - if (System.currentTimeMillis() - logFileManager.lastCreationTime > strategy.intervalInMillis) { - fileWriter.close() - fileWriter = FileWriter( - dateFormat = dateFormat, - logFile = logFileManager.currentLogFile(), - startLogs = config?.startupData, - ) + when (strategy) { + null -> { + } + is FileRotationStrategy.None -> { + } + is FileRotationStrategy.TimeBased -> { + if (System.currentTimeMillis() - logFileManager.lastCreationTime > strategy.intervalInMillis) { + fileWriter.close() + fileWriter = FileWriter( + dateFormat = dateFormat, + logFile = logFileManager.currentLogFile(), + startLogs = config?.startupData, + ) + } + } + is FileRotationStrategy.SizeBased -> { + if (fileWriter.totalBytes > strategy.bytes) { + fileWriter.close() + fileWriter = FileWriter( + dateFormat = dateFormat, + logFile = logFileManager.currentLogFile(), + startLogs = config?.startupData, + ) + } + } } - return fileWriter } diff --git a/filelogger/src/main/java/abbasi/android/filelogger/config/FileRotationStrategy.kt b/filelogger/src/main/java/abbasi/android/filelogger/config/FileRotationStrategy.kt index be9c5f0..fb8e22a 100644 --- a/filelogger/src/main/java/abbasi/android/filelogger/config/FileRotationStrategy.kt +++ b/filelogger/src/main/java/abbasi/android/filelogger/config/FileRotationStrategy.kt @@ -3,4 +3,5 @@ package abbasi.android.filelogger.config sealed interface FileRotationStrategy { object None : FileRotationStrategy data class TimeBased(val intervalInMillis: Long) : FileRotationStrategy + data class SizeBased(val bytes: ULong) : FileRotationStrategy } \ No newline at end of file diff --git a/filelogger/src/main/java/abbasi/android/filelogger/file/FileWriter.kt b/filelogger/src/main/java/abbasi/android/filelogger/file/FileWriter.kt index 51d81e0..2b03e01 100644 --- a/filelogger/src/main/java/abbasi/android/filelogger/file/FileWriter.kt +++ b/filelogger/src/main/java/abbasi/android/filelogger/file/FileWriter.kt @@ -8,6 +8,7 @@ package abbasi.android.filelogger.file import abbasi.android.filelogger.time.FastDateFormat import android.util.Log +import java.io.DataOutputStream import java.io.File import java.io.FileOutputStream import java.io.OutputStreamWriter @@ -17,28 +18,30 @@ internal class FileWriter( logFile: File, startLogs: Map?, ) { - private var streamWriter: OutputStreamWriter? = null + private var streamWriter: DataOutputStream? = null + public var totalBytes:ULong = 0u; init { try { val stream = FileOutputStream(logFile) - streamWriter = OutputStreamWriter(stream).apply { - write("File logger started at ${dateFormat.format(System.currentTimeMillis())}\n") - startLogs?.forEach { - write("${it.key}: ${it.value}\n") - } - write("\n\n") - flush() + streamWriter = DataOutputStream(stream) + var message = "File logger started at ${dateFormat.format(System.currentTimeMillis())}\n" + startLogs?.forEach { + message += "${it.key}: ${it.value}\n" } + message += "\n\n" + writeNoTag(message) } catch (e: Exception) { e.printStackTrace() } } - fun write(message: String) { + fun writeNoTag(message: String) { streamWriter?.let { writer -> try { - writer.write("${dateFormat.format(System.currentTimeMillis())} $message") + val bytes = message.toByteArray(Charsets.UTF_8) + totalBytes += bytes.count().toUInt() + writer.write(bytes) writer.flush() } catch (e: Exception) { Log.e(javaClass.simpleName, "e:", e) @@ -46,10 +49,16 @@ internal class FileWriter( } } + fun write(message: String) { + val formattedMessage = "${dateFormat.format(System.currentTimeMillis())} $message" + writeNoTag(formattedMessage) + } + fun close() { try { streamWriter?.close() streamWriter = null + totalBytes = 0u } catch (e: Exception) { e.printStackTrace() }