7
7
package abbasi.android.filelogger
8
8
9
9
import abbasi.android.filelogger.config.Config
10
+ import abbasi.android.filelogger.config.FileRotationStrategy
10
11
import abbasi.android.filelogger.file.FileWriter
11
12
import abbasi.android.filelogger.file.LogFileManager
12
13
import abbasi.android.filelogger.file.LogLevel
13
14
import abbasi.android.filelogger.file.RetentionPolicyChecker
14
15
import abbasi.android.filelogger.threading.ThreadQueue
16
+ import abbasi.android.filelogger.time.FastDateFormat
15
17
import abbasi.android.filelogger.util.FileZipper
16
18
import android.content.Context
17
19
import android.util.Log
18
20
import java.io.File
21
+ import java.util.Locale
19
22
20
23
object FileLogger {
21
24
@@ -26,6 +29,7 @@ object FileLogger {
26
29
private lateinit var retentionChecker: RetentionPolicyChecker
27
30
private lateinit var logFileManager: LogFileManager
28
31
private lateinit var fileWriter: FileWriter
32
+ private lateinit var dateFormat: FastDateFormat
29
33
30
34
private val fileZipper: FileZipper by lazy {
31
35
FileZipper ()
@@ -39,18 +43,19 @@ object FileLogger {
39
43
}
40
44
41
45
this .config = config
46
+ dateFormat = FastDateFormat .getInstance(config.dataFormatterPattern, Locale .US )
42
47
43
48
logFileManager = LogFileManager (
44
49
context = context.applicationContext,
45
- rootDir = config.directory
50
+ rootDir = config.directory,
51
+ dateFormat = dateFormat,
46
52
)
47
-
48
- retentionChecker = RetentionPolicyChecker (logFileManager)
53
+ retentionChecker = RetentionPolicyChecker (fileManager = logFileManager)
49
54
50
55
fileWriter = FileWriter (
51
- logFileManager = logFileManager ,
52
- dataFormatterPattern = config.dataFormatterPattern ,
53
- startLogs = config.startupData
56
+ dateFormat = dateFormat ,
57
+ logFile = logFileManager.currentLogFile() ,
58
+ startLogs = config.startupData,
54
59
)
55
60
56
61
initialized = true
@@ -118,27 +123,46 @@ object FileLogger {
118
123
tag : String? = config?.defaultTag,
119
124
msg : String? = "",
120
125
throwable : Throwable ? = null
121
- ) = fileWriter. let { writer ->
122
- logQueue.postRunnable {
123
- val message = config?.logInterceptor?.intercept(
124
- logLevel, tag.orEmpty(), msg.orEmpty(), throwable
125
- ) ? : msg
126
-
127
- val stringBuilder = StringBuilder ( " $logLevel / $tag : $message \n " )
128
-
129
- throwable?. let { exception ->
130
- exception.stackTrace.forEach { element ->
131
- stringBuilder.append( " \t $ element\n " )
132
- }
126
+ ) = logQueue.postRunnable {
127
+ if ( ! initialized) return @postRunnable
128
+
129
+ val message = config?.logInterceptor?.intercept(
130
+ logLevel, tag.orEmpty(), msg.orEmpty(), throwable
131
+ ) ? : msg
132
+
133
+ val stringBuilder = StringBuilder ( " $logLevel / $tag : $message \n " )
134
+
135
+ throwable?. let { exception ->
136
+ exception.stackTrace.forEach { element ->
137
+ stringBuilder.append( " \t $element \n " )
133
138
}
139
+ }
140
+
141
+ openedFileWriter().write(stringBuilder.toString())
142
+ }
143
+
144
+ private fun openedFileWriter (): FileWriter {
145
+ val strategy = config?.fileRotationStrategy
146
+
147
+ if (strategy == null || strategy !is FileRotationStrategy .TimeBased ) {
148
+ return fileWriter
149
+ }
134
150
135
- writer.write(stringBuilder.toString())
151
+ if (System .currentTimeMillis() - logFileManager.lastCreationTime > strategy.intervalInMillis) {
152
+ fileWriter.close()
153
+ fileWriter = FileWriter (
154
+ dateFormat = dateFormat,
155
+ logFile = logFileManager.currentLogFile(),
156
+ startLogs = config?.startupData,
157
+ )
136
158
}
159
+
160
+ return fileWriter
137
161
}
138
162
139
163
fun deleteFiles () = checkBlock {
140
164
i(msg = " FileLogger delete files called" )
141
- logFileManager.deleteLogsDir(fileWriter.openedFilePath )
165
+ logFileManager.deleteLogsDir()
142
166
}
143
167
144
168
fun compressLogsInZipFile (
0 commit comments