blob: e949742cdb59f0786672e24eb7afc76f3c489fad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
package at.hannibal2.skyhanni.utils
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.utils.LorenzUtils.formatCurrentTime
import kotlinx.coroutines.launch
import java.io.File
import java.io.IOException
import java.nio.file.Files
import java.nio.file.attribute.BasicFileAttributes
import java.text.SimpleDateFormat
import java.util.logging.FileHandler
import java.util.logging.Formatter
import java.util.logging.LogRecord
import java.util.logging.Logger
import kotlin.time.Duration.Companion.days
class LorenzLogger(filePath: String) {
private val format = SimpleDateFormat("HH:mm:ss")
private val fileName = "$PREFIX_PATH$filePath.log"
companion object {
private var LOG_DIRECTORY = File("config/skyhanni/logs")
private var PREFIX_PATH: String
var hasDone = false
init {
val format = SimpleDateFormat("yyyy_MM_dd/HH_mm_ss").formatCurrentTime()
PREFIX_PATH = "config/skyhanni/logs/$format/"
}
}
private lateinit var logger: Logger
private fun getLogger(): Logger {
if (::logger.isInitialized) {
return logger
}
val initLogger = initLogger()
this.logger = initLogger
return initLogger
}
private fun initLogger(): Logger {
val logger = Logger.getLogger("Lorenz-Logger-" + System.nanoTime())
try {
createParent(File(fileName))
val handler = FileHandler(fileName)
handler.encoding = "utf-8"
logger.addHandler(handler)
logger.useParentHandlers = false
handler.formatter = object : Formatter() {
override fun format(logRecord: LogRecord): String {
val message = logRecord.message
return format.formatCurrentTime() + " $message\n"
}
}
} catch (e: SecurityException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
if (!hasDone && LorenzUtils.onHypixel) {
hasDone = true
val directoryFiles = LOG_DIRECTORY.listFiles() ?: run {
println("log directory has no files")
return logger
}
SkyHanniMod.coroutineScope.launch {
val timeToDelete = SkyHanniMod.feature.dev.logExpiryTime.days
for (file in directoryFiles) {
val path = file.toPath()
try {
val attributes = Files.readAttributes(path, BasicFileAttributes::class.java)
val creationTime = attributes.creationTime().toMillis()
val timeSinceCreation = SimpleTimeMark(creationTime).passedSince()
if (timeSinceCreation > timeToDelete) {
if (!file.deleteRecursively()) {
println("failed to delete directory: ${file.name}")
}
}
} catch (e: SecurityException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
println("Error: Unable to get creation date.")
}
}
}
}
return logger
}
private fun createParent(file: File) {
val parent = file.parentFile
if (parent != null && !parent.isDirectory) {
parent.mkdirs()
}
}
fun log(text: String?) {
getLogger().info(text)
}
}
|