mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-05 00:10:13 +08:00
improve(logger/log4j): use reusable message for better performance
This commit is contained in:
parent
1d2c219b9d
commit
4586203c80
@ -13,45 +13,51 @@ import net.mamoe.mirai.utils.MiraiLoggerPlatformBase
|
|||||||
import org.apache.logging.log4j.Marker
|
import org.apache.logging.log4j.Marker
|
||||||
import org.apache.logging.log4j.MarkerManager
|
import org.apache.logging.log4j.MarkerManager
|
||||||
import org.apache.logging.log4j.message.Message
|
import org.apache.logging.log4j.message.Message
|
||||||
import org.apache.logging.log4j.message.SimpleMessage
|
import org.apache.logging.log4j.message.ReusableMessageFactory
|
||||||
import org.apache.logging.log4j.message.SimpleMessageFactory
|
import org.apache.logging.log4j.message.ReusableSimpleMessage
|
||||||
import java.util.logging.Level as JulLevel
|
import java.util.logging.Level as JulLevel
|
||||||
import java.util.logging.Logger as JulLogger
|
import java.util.logging.Logger as JulLogger
|
||||||
|
|
||||||
|
private inline fun ReusableMessageFactory.takeMessage(message: String?, crossinline block: (message: Message) -> Unit) {
|
||||||
|
val msg = this.newMessage(message) as ReusableSimpleMessage
|
||||||
|
block(msg)
|
||||||
|
msg.clear()
|
||||||
|
}
|
||||||
|
|
||||||
internal class Log4jLoggerAdapter(
|
internal class Log4jLoggerAdapter(
|
||||||
private val logger: org.apache.logging.log4j.Logger,
|
private val logger: org.apache.logging.log4j.Logger,
|
||||||
override val marker: Marker?,
|
override val marker: Marker?,
|
||||||
) : MiraiLoggerPlatformBase(), MarkedMiraiLogger {
|
) : MiraiLoggerPlatformBase(), MarkedMiraiLogger {
|
||||||
val factory: SimpleMessageFactory = SimpleMessageFactory.INSTANCE
|
val factory: ReusableMessageFactory = ReusableMessageFactory.INSTANCE
|
||||||
|
|
||||||
override fun verbose0(message: String?, e: Throwable?) {
|
override fun verbose0(message: String?, e: Throwable?) {
|
||||||
val marker = marker
|
factory.takeMessage(message) {
|
||||||
if (marker != null) logger.trace(marker, factory.newMessage(message), e)
|
logger.trace(marker, it, e)
|
||||||
else logger.trace(factory.newMessage(message), e)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun debug0(message: String?, e: Throwable?) {
|
override fun debug0(message: String?, e: Throwable?) {
|
||||||
val marker = marker
|
factory.takeMessage(message) {
|
||||||
if (marker != null) logger.debug(marker, factory.newMessage(message), e)
|
logger.debug(marker, it, e)
|
||||||
else logger.debug(factory.newMessage(message), e)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun info0(message: String?, e: Throwable?) {
|
override fun info0(message: String?, e: Throwable?) {
|
||||||
val marker = marker
|
factory.takeMessage(message) {
|
||||||
if (marker != null) logger.info(marker, factory.newMessage(message), e)
|
logger.info(marker, it, e)
|
||||||
else logger.info(factory.newMessage(message), e)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun warning0(message: String?, e: Throwable?) {
|
override fun warning0(message: String?, e: Throwable?) {
|
||||||
val marker = marker
|
factory.takeMessage(message) {
|
||||||
if (marker != null) logger.warn(marker, factory.newMessage(message), e)
|
logger.warn(marker, it, e)
|
||||||
else logger.warn(factory.newMessage(message), e)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun error0(message: String?, e: Throwable?) {
|
override fun error0(message: String?, e: Throwable?) {
|
||||||
val marker = marker
|
factory.takeMessage(message) {
|
||||||
if (marker != null) logger.error(marker, factory.newMessage(message), e)
|
logger.error(marker, it, e)
|
||||||
else logger.error(factory.newMessage(message), e)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val isVerboseEnabled: Boolean get() = logger.isTraceEnabled
|
override val isVerboseEnabled: Boolean get() = logger.isTraceEnabled
|
||||||
|
Loading…
Reference in New Issue
Block a user