[Change] MiraiToSlf4jLogger, log4j2.xml, log4j2-test.xml, MiraiMain 将Mirai框架的日志接入Slf4j(Log4j2);

[Change] BotEventHandler 调整日志使用;
This commit is contained in:
LamGC 2020-06-09 15:35:43 +08:00
parent e0f773639f
commit ca56b2c9ba
5 changed files with 151 additions and 26 deletions

View File

@ -64,14 +64,13 @@ public class BotEventHandler implements EventHandler {
*/ */
public synchronized static void initial() { public synchronized static void initial() {
if(initialled) { if(initialled) {
Logger logger = LoggerFactory.getLogger("BotEventHandler@<init>"); log.warn("BotEventHandler已经执行过初始化方法, 可能存在多次执行的问题, 堆栈信息: \n {}",
logger.warn("BotEventHandler已经执行过初始化方法, 可能存在多次执行的问题, 堆栈信息: \n {}",
Throwables.getStackTraceAsString(new Exception())); Throwables.getStackTraceAsString(new Exception()));
return; return;
} }
executor.setEventUncaughtExceptionHandler(new EventUncaughtExceptionHandler() { executor.setEventUncaughtExceptionHandler(new EventUncaughtExceptionHandler() {
private final Logger log = LoggerFactory.getLogger("EventUncaughtExceptionHandler"); private final Logger log = LoggerFactory.getLogger(this.getClass());
@Override @Override
public void exceptionHandler(Thread executeThread, EventHandler handler, Method handlerMethod, EventObject event, Throwable cause) { public void exceptionHandler(Thread executeThread, EventHandler handler, Method handlerMethod, EventObject event, Throwable cause) {
log.error("发生未捕获异常:\nThread:{}, EventHandler: {}, HandlerMethod: {}, EventObject: {}\n{}", log.error("发生未捕获异常:\nThread:{}, EventHandler: {}, HandlerMethod: {}, EventObject: {}\n{}",
@ -88,7 +87,7 @@ public class BotEventHandler implements EventHandler {
shutdownThread.setName("Thread-EventHandlerShutdown"); shutdownThread.setName("Thread-EventHandlerShutdown");
Runtime.getRuntime().addShutdownHook(shutdownThread); Runtime.getRuntime().addShutdownHook(shutdownThread);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
LoggerFactory.getLogger("BotEventHandler@Static").error("添加Handler时发生异常", e); log.error("添加Handler时发生异常", e);
} }
try { try {

View File

@ -4,15 +4,19 @@ import net.lamgc.cgj.bot.boot.ApplicationBoot;
import net.lamgc.cgj.bot.boot.BotGlobal; import net.lamgc.cgj.bot.boot.BotGlobal;
import net.lamgc.cgj.bot.event.BotEventHandler; import net.lamgc.cgj.bot.event.BotEventHandler;
import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageEvent; import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageEvent;
import net.lamgc.cgj.bot.message.MessageSenderBuilder;
import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageSenderFactory; import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageSenderFactory;
import net.lamgc.cgj.bot.message.MessageSenderBuilder;
import net.mamoe.mirai.Bot; import net.mamoe.mirai.Bot;
import net.mamoe.mirai.BotFactoryJvm; import net.mamoe.mirai.BotFactoryJvm;
import net.mamoe.mirai.event.events.BotMuteEvent; import net.mamoe.mirai.event.events.BotMuteEvent;
import net.mamoe.mirai.event.events.BotUnmuteEvent; import net.mamoe.mirai.event.events.BotUnmuteEvent;
import net.mamoe.mirai.japt.Events; import net.mamoe.mirai.japt.Events;
import net.mamoe.mirai.message.*; import net.mamoe.mirai.message.FriendMessageEvent;
import net.mamoe.mirai.message.GroupMessageEvent;
import net.mamoe.mirai.message.MessageEvent;
import net.mamoe.mirai.message.TempMessageEvent;
import net.mamoe.mirai.utils.BotConfiguration; import net.mamoe.mirai.utils.BotConfiguration;
import net.mamoe.mirai.utils.Utils;
import org.apache.commons.net.util.Base64; import org.apache.commons.net.util.Base64;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -45,6 +49,7 @@ public class MiraiMain implements Closeable {
return; return;
} }
Utils.setDefaultLogger(MiraiToSlf4jLogger::new);
BotConfiguration configuration = new BotConfiguration(); BotConfiguration configuration = new BotConfiguration();
configuration.setProtocol(BotConfiguration.MiraiProtocol.ANDROID_PAD); configuration.setProtocol(BotConfiguration.MiraiProtocol.ANDROID_PAD);
bot = BotFactoryJvm.newBot(Long.parseLong(botProperties.getProperty("bot.qq", "0")), Base64.decodeBase64(botProperties.getProperty("bot.password", "")), configuration); bot = BotFactoryJvm.newBot(Long.parseLong(botProperties.getProperty("bot.qq", "0")), Base64.decodeBase64(botProperties.getProperty("bot.password", "")), configuration);

View File

@ -0,0 +1,84 @@
package net.lamgc.cgj.bot.framework.mirai;
import net.mamoe.mirai.utils.MiraiLogger;
import net.mamoe.mirai.utils.MiraiLoggerPlatformBase;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class MiraiToSlf4jLogger extends MiraiLoggerPlatformBase {
private final static Marker marker = MarkerFactory.getMarker("mirai");
private final Logger logger;
private final String identity;
public MiraiToSlf4jLogger(String identity) {
this.identity = identity;
this.logger = LoggerFactory.getLogger("mirai." + identity);
}
@Override
protected void debug0(@Nullable String s) {
logger.debug(marker, s);
}
@Override
protected void debug0(@Nullable String s, @Nullable Throwable throwable) {
logger.debug(marker, s, throwable);
}
@Override
protected void error0(@Nullable String s) {
logger.error(marker, s);
}
@Override
protected void error0(@Nullable String s, @Nullable Throwable throwable) {
logger.error(marker, s, throwable);
}
@Override
protected void info0(@Nullable String s) {
logger.info(marker, s);
}
@Override
protected void info0(@Nullable String s, @Nullable Throwable throwable) {
logger.info(marker, s, throwable);
}
@Override
protected void verbose0(@Nullable String s) {
logger.trace(marker, s);
}
@Override
protected void verbose0(@Nullable String s, @Nullable Throwable throwable) {
logger.trace(marker, s, throwable);
}
@Override
protected void warning0(@Nullable String s) {
logger.warn(marker, s);
}
@Override
protected void warning0(@Nullable String s, @Nullable Throwable throwable) {
logger.warn(marker, s, throwable);
}
@Nullable
@Override
public String getIdentity() {
if(identity == null) {
MiraiLogger followerLogger = getFollower();
return followerLogger == null ? null : followerLogger.getIdentity();
} else {
return identity;
}
}
}

View File

@ -3,26 +3,39 @@
<properties> <properties>
<property name="logStorePath">./logs</property> <property name="logStorePath">./logs</property>
<property name="charset">UTF-8</property> <property name="charset">UTF-8</property>
<property name="pattern">[%-d{HH:mm:ss.SSS} %5level][%logger.%method():%-3L][%thread]: %msg%n</property> <property name="standard_pattern">[%-d{HH:mm:ss.SSS} %5level][%logger.%method():%-3L][%thread]: %msg%n</property>
<property name="mirai_pattern">[%-d{HH:mm:ss.SSS} %5level][%logger]: %msg%n</property>
<property name="logsDir">${sys:cgj.logsPath:-logs}</property> <property name="logsDir">${sys:cgj.logsPath:-logs}</property>
</properties> </properties>
<Appenders> <Appenders>
<Console name="CONSOLE_STDOUT" target="SYSTEM_OUT"> <Console name="STANDARD_STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Filters> <Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT"/> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters> </Filters>
</Console> </Console>
<Console name="CONSOLE_STDERR" target="SYSTEM_ERR"> <Console name="STANDARD_STDERR" target="SYSTEM_ERR">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Filters> <Filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/> <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters> </Filters>
</Console> </Console>
<RollingFile name="rollingFile" fileName="${logsDir}/latest.log" filePattern="${logsDir}/running.%-d{yyyy-MM-dd_HH-mm-ss}.log.gz"> <RollingFile name="rollingFile" fileName="${logsDir}/latest.log" filePattern="${logsDir}/running.%-d{yyyy-MM-dd_HH-mm-ss}.log.gz">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Policies> <Policies>
<OnStartupTriggeringPolicy /> <OnStartupTriggeringPolicy />
</Policies> </Policies>
@ -32,8 +45,8 @@
<Loggers> <Loggers>
<Logger level="INFO" name="org.apache.http"/> <Logger level="INFO" name="org.apache.http"/>
<Root level="TRACE"> <Root level="TRACE">
<AppenderRef ref="CONSOLE_STDOUT"/> <AppenderRef ref="STANDARD_STDOUT"/>
<AppenderRef ref="CONSOLE_STDERR"/> <AppenderRef ref="STANDARD_STDERR"/>
<AppenderRef ref="rollingFile"/> <AppenderRef ref="rollingFile"/>
</Root> </Root>
</Loggers> </Loggers>

View File

@ -1,29 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN"> <configuration status="WARN">
<!--
测试版跟发布版在日志配置文件上的区别仅仅只有'Loggers'的不同, 'properties'和'Appenders'是一致的.
-->
<properties> <properties>
<property name="logStorePath">./logs</property> <property name="logStorePath">./logs</property>
<property name="charset">UTF-8</property> <property name="charset">UTF-8</property>
<property name="pattern">[%-d{HH:mm:ss.SSS} %5level][%logger.%method():%-3L][%thread]: %msg%n</property> <property name="standard_pattern">[%-d{HH:mm:ss.SSS} %5level][%logger.%method():%-3L][%thread]: %msg%n</property>
<property name="mirai_pattern">[%-d{HH:mm:ss.SSS} %5level][%logger]: %msg%n</property>
<property name="logsDir">${sys:cgj.logsPath:-logs}</property> <property name="logsDir">${sys:cgj.logsPath:-logs}</property>
</properties> </properties>
<Appenders> <Appenders>
<Console name="CONSOLE_STDOUT" target="SYSTEM_OUT"> <Console name="STANDARD_STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Filters> <Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters> </Filters>
</Console> </Console>
<Console name="CONSOLE_STDERR" target="SYSTEM_ERR"> <Console name="STANDARD_STDERR" target="SYSTEM_ERR">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Filters> <Filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/> <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters> </Filters>
</Console> </Console>
<RollingFile name="rollingFile" fileName="${logsDir}/latest.log" filePattern="${logsDir}/running.%-d{yyyy-MM-dd_HH-mm-ss}.log.gz"> <RollingFile name="rollingFile" fileName="${logsDir}/latest.log" filePattern="${logsDir}/running.%-d{yyyy-MM-dd_HH-mm-ss}.log.gz">
<PatternLayout pattern="${pattern}" charset="${charset}"/> <PatternLayout charset="${charset}">
<MarkerPatternSelector defaultPattern="${standard_pattern}">
<PatternMatch key="mirai" pattern="${mirai_pattern}" />
</MarkerPatternSelector>
</PatternLayout>
<Policies> <Policies>
<OnStartupTriggeringPolicy /> <OnStartupTriggeringPolicy />
</Policies> </Policies>
@ -31,10 +46,19 @@
</Appenders> </Appenders>
<Loggers> <Loggers>
<Logger level="INFO" name="org.apache.http"/> <Logger level="INFO" name="org.apache.http">
<Root level="INFO"> <AppenderRef ref="STANDARD_STDOUT"/>
<AppenderRef ref="CONSOLE_STDOUT"/> <AppenderRef ref="STANDARD_STDERR"/>
<AppenderRef ref="CONSOLE_STDERR"/> </Logger>
<Logger level="TRACE" name="mirai">
<AppenderRef ref="STANDARD_STDOUT"/>
<AppenderRef ref="STANDARD_STDERR"/>
</Logger>
<Logger level="INFO" name="net.lamgc.cgj">
<AppenderRef ref="STANDARD_STDOUT"/>
<AppenderRef ref="STANDARD_STDERR"/>
</Logger>
<Root level="TRACE">
<AppenderRef ref="rollingFile"/> <AppenderRef ref="rollingFile"/>
</Root> </Root>
</Loggers> </Loggers>