Compare commits

..

12 Commits

Author SHA1 Message Date
04724168aa [Version] 更新版本(2.5.2-20200610.1-SNAPSHOT -> 2.5.2-20200610.2-SNAPSHOT); 2020-06-10 10:20:20 +08:00
89ded96336 [Change] 更改部分组件所使用的的工具类; 2020-06-10 10:17:05 +08:00
af0346e952 [Delete] net.sourceforge.htmlunit:htmlunit 删除未使用的依赖项;
[Delete] com.github.rholder:guava-retrying 删除未使用的依赖项;
[Delete] mysql:mysql-connector-java 删除未使用的依赖项;
2020-06-10 09:39:10 +08:00
4ccf2fafbc [Version] 更新版本(2.5.2-20200609.2-SNAPSHOT -> 2.5.2-20200610.1-SNAPSHOT); 2020-06-10 09:21:27 +08:00
f1e58d72ac [Change] log4j2.xml 调整mirai日志在STANDARD_STD*的输出级别; 2020-06-10 09:20:35 +08:00
9242a1d474 [Change] MiraiToSlf4jLoggerAdapter 调整类命名(MiraiToSlf4jLogger -> MiraiToSlf4jLoggerAdapter);
[Change] MiraiMain 适配调整;
2020-06-10 09:13:12 +08:00
065d21c4e4 [Update] MiraiToSlf4jLogger 补充类Javadoc; 2020-06-10 09:10:17 +08:00
5eab94c429 [Change] Console* 调整包路径; 2020-06-10 09:09:54 +08:00
2dd62bb6c8 [Version] 更新版本(2.5.2-20200609.1-SNAPSHOT -> 2.5.2-20200609.2-SNAPSHOT); 2020-06-09 16:02:03 +08:00
21613fe3c0 [Update] net.mamoe:mirai-core 更新依赖项版本(1.0-RC2-1 -> 1.0.2);
[Update] net.mamoe:mirai-core-qqandroid 更新依赖项版本(1.0-RC2-1 -> 1.0.2);
2020-06-09 15:51:33 +08:00
ca56b2c9ba [Change] MiraiToSlf4jLogger, log4j2.xml, log4j2-test.xml, MiraiMain 将Mirai框架的日志接入Slf4j(Log4j2);
[Change] BotEventHandler 调整日志使用;
2020-06-09 15:35:43 +08:00
e0f773639f [Change] ConsoleMain 调整Terminal获取方式; 2020-06-09 14:16:26 +08:00
14 changed files with 181 additions and 66 deletions

19
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>net.lamgc</groupId> <groupId>net.lamgc</groupId>
<artifactId>ContentGrabbingJi</artifactId> <artifactId>ContentGrabbingJi</artifactId>
<version>2.5.2-20200609.1-SNAPSHOT</version> <version>2.5.2-20200610.2-SNAPSHOT</version>
<repositories> <repositories>
<repository> <repository>
@ -19,7 +19,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<mirai.CoreVersion>1.0-RC2-1</mirai.CoreVersion> <mirai.CoreVersion>1.0.2</mirai.CoreVersion>
<mirai.JaptVersion>1.1.1</mirai.JaptVersion> <mirai.JaptVersion>1.1.1</mirai.JaptVersion>
<kotlin.version>1.3.71</kotlin.version> <kotlin.version>1.3.71</kotlin.version>
<ktor.version>1.3.2</ktor.version> <ktor.version>1.3.2</ktor.version>
@ -110,21 +110,6 @@
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.8.5</version> <version>2.8.5</version>
</dependency> </dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.29</version>
</dependency>
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency> <dependency>
<groupId>net.lz1998</groupId> <groupId>net.lz1998</groupId>
<artifactId>spring-cq</artifactId> <artifactId>spring-cq</artifactId>

View File

@ -19,12 +19,12 @@ import net.lamgc.plps.PixivLoginProxyServer;
import net.lamgc.utils.base.runner.Argument; import net.lamgc.utils.base.runner.Argument;
import net.lamgc.utils.base.runner.ArgumentsRunner; import net.lamgc.utils.base.runner.ArgumentsRunner;
import net.lamgc.utils.base.runner.Command; import net.lamgc.utils.base.runner.Command;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore; import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.tomcat.util.http.fileupload.util.Streams;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
@ -127,7 +127,7 @@ public class Main {
ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1)); ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1));
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
} catch (IOException e) { } catch (IOException e) {
log.error("写入文件项时发生异常", e); log.error("写入文件项时发生异常", e);
@ -159,7 +159,7 @@ public class Main {
ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1)); ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1));
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
log.info("已成功写入 {}", entry.getName()); log.info("已成功写入 {}", entry.getName());
} catch (IOException e) { } catch (IOException e) {
@ -230,7 +230,7 @@ public class Main {
entry.setComment(rankInfo.toString()); entry.setComment(rankInfo.toString());
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
log.info("已成功写入 {}", entry.getName()); log.info("已成功写入 {}", entry.getName());
} catch (IOException e) { } catch (IOException e) {

View File

@ -5,11 +5,11 @@ import net.lamgc.cgj.bot.cache.exception.HttpRequestException;
import net.lamgc.cgj.pixiv.PixivURL; import net.lamgc.cgj.pixiv.PixivURL;
import net.lamgc.cgj.util.URLs; import net.lamgc.cgj.util.URLs;
import net.lamgc.utils.event.EventHandler; import net.lamgc.utils.event.EventHandler;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.tomcat.util.http.fileupload.util.Streams;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -69,7 +69,7 @@ public class ImageCacheHandler implements EventHandler {
log.debug("正在下载...(Content-Length: {}KB)", response.getEntity().getContentLength() / 1024); log.debug("正在下载...(Content-Length: {}KB)", response.getEntity().getContentLength() / 1024);
ByteArrayOutputStream bufferOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream bufferOutputStream = new ByteArrayOutputStream();
try(FileOutputStream fileOutputStream = new FileOutputStream(storeFile)) { try(FileOutputStream fileOutputStream = new FileOutputStream(storeFile)) {
IOUtils.copy(response.getEntity().getContent(), bufferOutputStream); Streams.copy(response.getEntity().getContent(), bufferOutputStream, false);
ByteArrayInputStream bufferInputStream = new ByteArrayInputStream(bufferOutputStream.toByteArray()); ByteArrayInputStream bufferInputStream = new ByteArrayInputStream(bufferOutputStream.toByteArray());
CacheStoreCentral.ImageChecksum imageChecksum = CacheStoreCentral.ImageChecksum CacheStoreCentral.ImageChecksum imageChecksum = CacheStoreCentral.ImageChecksum
.buildImageChecksumFromStream( .buildImageChecksumFromStream(
@ -79,7 +79,7 @@ public class ImageCacheHandler implements EventHandler {
bufferInputStream bufferInputStream
); );
bufferInputStream.reset(); bufferInputStream.reset();
IOUtils.copy(bufferInputStream, fileOutputStream); Streams.copy(bufferInputStream, fileOutputStream, false);
CacheStoreCentral.setImageChecksum(imageChecksum); CacheStoreCentral.setImageChecksum(imageChecksum);
} catch (IOException e) { } catch (IOException e) {
log.error("下载图片时发生异常", e); log.error("下载图片时发生异常", e);

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

@ -2,6 +2,8 @@ package net.lamgc.cgj.bot.framework.cli;
import net.lamgc.cgj.bot.boot.ApplicationBoot; import net.lamgc.cgj.bot.boot.ApplicationBoot;
import net.lamgc.cgj.bot.event.BotEventHandler; import net.lamgc.cgj.bot.event.BotEventHandler;
import net.lamgc.cgj.bot.framework.cli.message.ConsoleMessageEvent;
import net.lamgc.cgj.bot.framework.cli.message.ConsoleMessageSenderFactory;
import net.lamgc.cgj.bot.message.MessageSenderBuilder; import net.lamgc.cgj.bot.message.MessageSenderBuilder;
import org.jline.reader.LineReader; import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder; import org.jline.reader.LineReaderBuilder;
@ -17,15 +19,12 @@ public class ConsoleMain {
private final static Logger log = LoggerFactory.getLogger(ConsoleMain.class); private final static Logger log = LoggerFactory.getLogger(ConsoleMain.class);
public static void start() throws IOException { public static void start() throws IOException {
ConsoleMessageSenderFactory senderFactory = new ConsoleMessageSenderFactory(); MessageSenderBuilder.setCurrentMessageSenderFactory(new ConsoleMessageSenderFactory());
MessageSenderBuilder.setCurrentMessageSenderFactory(senderFactory);
ApplicationBoot.initialBot(); ApplicationBoot.initialBot();
LineReader lineReader = LineReaderBuilder.builder() LineReader lineReader = LineReaderBuilder.builder()
.appName("CGJ") .appName("CGJ")
.history(new DefaultHistory()) .history(new DefaultHistory())
.terminal(TerminalBuilder.builder() .terminal(TerminalBuilder.terminal())
.dumb(true)
.build())
.build(); .build();
long qqId = Long.parseLong(lineReader.readLine("会话QQ: ")); long qqId = Long.parseLong(lineReader.readLine("会话QQ: "));

View File

@ -1,4 +1,4 @@
package net.lamgc.cgj.bot.framework.cli; package net.lamgc.cgj.bot.framework.cli.message;
import net.lamgc.cgj.bot.event.MessageEvent; import net.lamgc.cgj.bot.event.MessageEvent;

View File

@ -1,4 +1,4 @@
package net.lamgc.cgj.bot.framework.cli; package net.lamgc.cgj.bot.framework.cli.message;
import net.lamgc.cgj.bot.message.MessageSender; import net.lamgc.cgj.bot.message.MessageSender;

View File

@ -1,4 +1,4 @@
package net.lamgc.cgj.bot.framework.cli; package net.lamgc.cgj.bot.framework.cli.message;
import net.lamgc.cgj.bot.message.MessageSender; import net.lamgc.cgj.bot.message.MessageSender;
import net.lamgc.cgj.bot.message.MessageSenderFactory; import net.lamgc.cgj.bot.message.MessageSenderFactory;

View File

@ -4,20 +4,24 @@ 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 org.apache.commons.net.util.Base64; import net.mamoe.mirai.utils.Utils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.util.Base64;
import java.util.Properties; import java.util.Properties;
public class MiraiMain implements Closeable { public class MiraiMain implements Closeable {
@ -45,9 +49,11 @@ public class MiraiMain implements Closeable {
return; return;
} }
Utils.setDefaultLogger(MiraiToSlf4jLoggerAdapter::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.getDecoder().decode(botProperties.getProperty("bot.password", "")), configuration);
Events.subscribeAlways(GroupMessageEvent.class, this::executeMessageEvent); Events.subscribeAlways(GroupMessageEvent.class, this::executeMessageEvent);
Events.subscribeAlways(FriendMessageEvent.class, this::executeMessageEvent); Events.subscribeAlways(FriendMessageEvent.class, this::executeMessageEvent);
Events.subscribeAlways(TempMessageEvent.class, this::executeMessageEvent); Events.subscribeAlways(TempMessageEvent.class, this::executeMessageEvent);

View File

@ -0,0 +1,89 @@
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;
/**
* MiraiLoggerToSlf4jLogger适配器
* <p>该Logger通过Slf4j的Marker进行标识, loggerName为{@code mirai.[identity]}</p>
* <p>由于适配器适配方式的原因, 日志输出的调用信息将不可用(调用指向了适配器内的方法);</p>
*/
public class MiraiToSlf4jLoggerAdapter extends MiraiLoggerPlatformBase {
private final static Marker marker = MarkerFactory.getMarker("mirai");
private final Logger logger;
private final String identity;
public MiraiToSlf4jLoggerAdapter(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

@ -7,11 +7,11 @@ import com.squareup.gifencoder.GifEncoder;
import com.squareup.gifencoder.Image; import com.squareup.gifencoder.Image;
import com.squareup.gifencoder.ImageOptions; import com.squareup.gifencoder.ImageOptions;
import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderNames;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.tomcat.util.http.fileupload.util.Streams;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -126,7 +126,7 @@ public final class PixivUgoiraBuilder {
HashMap<String, InputStream> frameMap = new HashMap<>(frames.size()); HashMap<String, InputStream> frameMap = new HashMap<>(frames.size());
while((entry = zipInputStream.getNextEntry()) != null) { while((entry = zipInputStream.getNextEntry()) != null) {
log.trace("ZipEntry {} 正在接收...", entry); log.trace("ZipEntry {} 正在接收...", entry);
IOUtils.copy(zipInputStream, cacheOutputStream); Streams.copy(zipInputStream, cacheOutputStream, false);
frameMap.put(entry.getName(), new ByteArrayInputStream(cacheOutputStream.toByteArray())); frameMap.put(entry.getName(), new ByteArrayInputStream(cacheOutputStream.toByteArray()));
log.trace("ZipEntry {} 已接收完成.", entry); log.trace("ZipEntry {} 已接收完成.", entry);
cacheOutputStream.reset(); cacheOutputStream.reset();

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="INFO" 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>

View File

@ -2,7 +2,6 @@ package net.lamgc.cgj.pixiv;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.client.CookieStore; import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
@ -10,6 +9,7 @@ import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.tomcat.util.http.fileupload.util.Streams;
import org.junit.Assert; import org.junit.Assert;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore; import org.junit.Ignore;
@ -64,7 +64,7 @@ public class PixivDownloadTest {
ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1)); ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1));
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
} catch (IOException e) { } catch (IOException e) {
log.error("写入文件项时发生异常", e); log.error("写入文件项时发生异常", e);
@ -96,7 +96,7 @@ public class PixivDownloadTest {
ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1)); ZipEntry entry = new ZipEntry(link.substring(link.lastIndexOf("/") + 1));
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
log.info("已成功写入 {}", entry.getName()); log.info("已成功写入 {}", entry.getName());
} catch (IOException e) { } catch (IOException e) {
@ -139,7 +139,7 @@ public class PixivDownloadTest {
entry.setComment(rankInfo.toString()); entry.setComment(rankInfo.toString());
log.info("正在写入: " + entry.getName()); log.info("正在写入: " + entry.getName());
zos.putNextEntry(entry); zos.putNextEntry(entry);
IOUtils.copy(inputStream, zos); Streams.copy(inputStream, zos, false);
zos.flush(); zos.flush();
log.info("已成功写入 {}", entry.getName()); log.info("已成功写入 {}", entry.getName());
} catch (IOException e) { } catch (IOException e) {