Skip to content

Commit 9a4349f

Browse files
committed
日志代码优化
1 parent bfa59ab commit 9a4349f

File tree

8 files changed

+121
-56
lines changed

8 files changed

+121
-56
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ javaw -server -Xms128m -Xmx256m -jar snail.javafx-{version}.jar
141141
|:--|:--:|:--|
142142
|[h2](http://www.h2database.com)|[License](http://www.h2database.com/html/license.html)|MPL 2.0/EPL 1.0|
143143
|[slf4j](https://www.slf4j.org)|[License](https://www.slf4j.org/license.html)|MIT|
144-
|[logback](https://logback.qos.ch)|[License](https://logback.qos.ch/license.html)|LGPL 2.1/EPL 1.0|
145144
|[JavaFX](https://wiki.openjdk.java.net/display/OpenJFX/Main)|[License](http://openjdk.java.net/legal/gplv2+ce.html)|GPL 2.0|
146145

147146
## 视频播放

snail/src/main/java/com/acgist/snail/context/LoggerContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public static final LoggerContext getInstance() {
3737
private final List<LoggerAdapter> adapters;
3838

3939
private LoggerContext() {
40-
this.loggers = new ConcurrentHashMap<String, Logger>();
40+
this.loggers = new ConcurrentHashMap<>();
4141
final String adapter = LoggerConfig.getAdapter();
42-
final List<LoggerAdapter> list = new ArrayList<LoggerAdapter>();
42+
final List<LoggerAdapter> list = new ArrayList<>();
4343
if(adapter != null && !adapter.isEmpty()) {
4444
final String[] adapters = adapter.split(",");
4545
for (String value : adapters) {
@@ -95,7 +95,7 @@ public void output(Level level, String message) {
9595
* <p>关闭日志</p>
9696
*/
9797
public static final void shutdown() {
98-
INSTANCE.adapters.forEach(adapter -> adapter.release());
98+
INSTANCE.adapters.forEach(LoggerAdapter::release);
9999
}
100100

101101
}

snail/src/main/java/com/acgist/snail/logger/Logger.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,25 @@ public final class Logger implements org.slf4j.Logger {
3131
*/
3232
private final int level;
3333
/**
34-
* <p>系统名称</p>
34+
* <p>日志名称</p>
3535
*/
3636
private final String name;
3737
/**
38-
* <p>日志名称</p>
38+
* <p>日志系统名称</p>
3939
*/
40-
private final String logger;
40+
private final String system;
4141
/**
4242
* <p>日志上下文</p>
4343
*/
4444
private final LoggerContext context;
4545

4646
/**
47-
* @param logger 日志名称
47+
* @param name 日志名称
4848
*/
49-
public Logger(String logger) {
49+
public Logger(String name) {
50+
this.name = name;
5051
this.level = LoggerConfig.getLevelInt();
51-
this.name = LoggerConfig.getName();
52-
this.logger = logger;
52+
this.system = LoggerConfig.getSystem();
5353
this.context = LoggerContext.getInstance();
5454
}
5555

@@ -73,11 +73,11 @@ public static final void error(Throwable t) {
7373
private String format(Level level, FormattingTuple message) {
7474
final StringBuilder builder = new StringBuilder();
7575
builder
76-
.append("[").append(this.name).append("]").append(" ")
77-
.append(FORMATER.get().format(new Date())).append(" ")
78-
.append(Thread.currentThread().getName()).append(" ")
76+
.append("[").append(this.system).append("] ")
77+
.append(FORMATER.get().format(new Date())).append(" [")
78+
.append(Thread.currentThread().getName()).append("] ")
7979
.append(level.name()).append(" ")
80-
.append(this.logger).append(" ")
80+
.append(this.name).append(" ")
8181
.append(message.getMessage()).append(" ")
8282
.append("\n");
8383
final Throwable throwable = message.getThrowable();
@@ -104,7 +104,7 @@ private void output(Level level, FormattingTuple message) {
104104

105105
@Override
106106
public String getName() {
107-
return "SnailLogger";
107+
return this.name;
108108
}
109109

110110
/**

snail/src/main/java/com/acgist/snail/logger/LoggerConfig.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ private LoggerConfig() {
4646
* <p>配置信息</p>
4747
*/
4848
private final Properties properties;
49-
/**
50-
* <p>日志名称</p>
51-
*/
52-
private String name;
5349
/**
5450
* <p>日志级别</p>
5551
*/
5652
private String level;
53+
/**
54+
* <p>日志系统名称</p>
55+
*/
56+
private String system;
5757
/**
5858
* <p>日志适配</p>
5959
*/
@@ -67,29 +67,20 @@ private LoggerConfig() {
6767
*/
6868
private int fileBuffer;
6969
/**
70-
* <p>文件日志最大备份数量</p>
70+
* <p>文件日志最大备份时间</p>
7171
*/
72-
private int fileMaxSize;
72+
private int fileMaxDays;
7373

7474
/**
7575
* <p>初始化配置</p>
7676
*/
7777
private void init() {
78-
this.name = this.properties.getProperty("logger.name");
7978
this.level = this.properties.getProperty("logger.level");
79+
this.system = this.properties.getProperty("logger.system");
8080
this.adapter = this.properties.getProperty("logger.adapter");
8181
this.fileName = this.properties.getProperty("logger.file.name");
8282
this.fileBuffer = Integer.parseInt(this.properties.getProperty("logger.file.buffer", "8192"));
83-
this.fileMaxSize = Integer.parseInt(this.properties.getProperty("logger.file.max.size", "30"));
84-
}
85-
86-
/**
87-
* <p>获取日志名称</p>
88-
*
89-
* @return 日志名称
90-
*/
91-
public static final String getName() {
92-
return INSTANCE.name;
83+
this.fileMaxDays = Integer.parseInt(this.properties.getProperty("logger.file.max.days", "30"));
9384
}
9485

9586
/**
@@ -100,6 +91,15 @@ public static final String getName() {
10091
public static final String getLevel() {
10192
return INSTANCE.level;
10293
}
94+
95+
/**
96+
* <p>获取日志系统名称</p>
97+
*
98+
* @return 日志系统名称
99+
*/
100+
public static final String getSystem() {
101+
return INSTANCE.system;
102+
}
103103

104104
/**
105105
* <p>获取日志级别(数字)</p>
@@ -146,12 +146,12 @@ public static final int getFileBuffer() {
146146
}
147147

148148
/**
149-
* <p>获取文件日志最大备份数量</p>
149+
* <p>获取文件日志最大备份时间</p>
150150
*
151-
* @return 文件日志最大备份数量
151+
* @return 文件日志最大备份时间
152152
*/
153-
public static final int getFileMaxSize() {
154-
return INSTANCE.fileMaxSize;
153+
public static final int getFileMaxDays() {
154+
return INSTANCE.fileMaxDays;
155155
}
156156

157157
}

snail/src/main/java/com/acgist/snail/logger/adapter/FileLoggerAdapter.java

Lines changed: 76 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import java.io.IOException;
77
import java.io.OutputStream;
88
import java.text.SimpleDateFormat;
9+
import java.time.Duration;
10+
import java.time.Instant;
11+
import java.time.LocalDateTime;
12+
import java.time.ZoneId;
913
import java.util.Date;
1014

1115
import com.acgist.snail.logger.Logger;
@@ -36,22 +40,84 @@ public FileLoggerAdapter() {
3640
* @return 文件输出流
3741
*/
3842
private OutputStream buildOutput() {
39-
final String fileName = LoggerConfig.getFileName();
4043
final int fileBuffer = LoggerConfig.getFileBuffer();
41-
final SimpleDateFormat format = new SimpleDateFormat(".yyyy.MM.dd");
42-
final String path = fileName + format.format(new Date());
44+
final File file = this.buildFile();
45+
this.buildParent(file);
4346
try {
44-
final File file = new File(path);
45-
// 创建上级目录
46-
final File parent = file.getParentFile();
47-
if(!parent.exists()) {
48-
parent.mkdirs();
49-
}
5047
return new BufferedOutputStream(new FileOutputStream(file, true), fileBuffer);
5148
} catch (IOException e) {
5249
Logger.error(e);
5350
}
5451
return null;
5552
}
56-
53+
54+
@Override
55+
public void release() {
56+
super.release();
57+
final File file = this.buildFile();
58+
final String fileName = file.getName();
59+
final LocalDateTime now = LocalDateTime.now();
60+
final int maxDays = LoggerConfig.getFileMaxDays();
61+
final File[] childrens = file.getParentFile().listFiles();
62+
for (File children : childrens) {
63+
if(this.deleteable(maxDays, fileName, now, children)) {
64+
children.delete();
65+
}
66+
}
67+
}
68+
69+
/**
70+
* <p>创建日志文件</p>
71+
*
72+
* @return 日志文件
73+
*/
74+
private File buildFile() {
75+
final String fileName = LoggerConfig.getFileName();
76+
final SimpleDateFormat format = new SimpleDateFormat(".yyyy.MM.dd");
77+
final String path = fileName + format.format(new Date());
78+
return new File(path);
79+
}
80+
81+
/**
82+
* <p>创建上级目录</p>
83+
*
84+
* @param file 日志文件
85+
*/
86+
private void buildParent(File file) {
87+
final File parent = file.getParentFile();
88+
if(!parent.exists()) {
89+
parent.mkdirs();
90+
}
91+
}
92+
93+
/**
94+
* <p>判断文件是否能够删除</p>
95+
* <p>日志文件、超过最大备份数量</p>
96+
*
97+
* @param maxDays 最大备份数量
98+
* @param fileName 日志文件名称
99+
* @param now 当前时间
100+
* @param file 文件
101+
*
102+
* @return 是否可以删除
103+
*/
104+
private boolean deleteable(int maxDays, String fileName, LocalDateTime now, File file) {
105+
// 判断修改时间
106+
final LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(file.lastModified()), ZoneId.systemDefault());
107+
final long days = Duration.between(localDateTime, now).toDays();
108+
if(days <= maxDays) {
109+
return false;
110+
}
111+
// 判断文件名称
112+
final String name = file.getName();
113+
if(name.length() != fileName.length()) {
114+
return false;
115+
}
116+
// snail.log.yyyy.MM.dd
117+
if(name.length() <= 10) {
118+
return false;
119+
}
120+
return name.substring(0, 10).equals(fileName.substring(0, 10));
121+
}
122+
57123
}

snail/src/main/java/org/slf4j/impl/StaticLoggerBinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
* @author acgist
1212
*/
13-
public class StaticLoggerBinder implements LoggerFactoryBinder {
13+
public final class StaticLoggerBinder implements LoggerFactoryBinder {
1414

1515
private static final StaticLoggerBinder INSTANCE = new StaticLoggerBinder();
1616

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#================ 日志配置 ================#
2-
# 日志名称
3-
logger.name=Snail
42
# 日志级别
53
logger.level=DEBUG
4+
# 日志系统名称
5+
logger.system=Snail
66
# 日志适配
77
logger.adapter=file, console
88
# 文件日志名称
99
logger.file.name=logs/snail.log
1010
# 文件日志缓存
1111
logger.file.buffer=8192
12-
# 文件日志最大备份数量
13-
logger.file.max.size=30
12+
# 文件日志最大备份时间
13+
logger.file.max.days=30
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#================ 日志配置 ================#
2-
# 日志名称
3-
logger.name=Snail
42
# 日志级别
53
logger.level=INFO
4+
# 日志系统名称
5+
logger.system=Snail
66
# 日志适配
77
logger.adapter=file
88
# 文件日志名称
99
logger.file.name=logs/snail.log
1010
# 文件日志缓存
1111
logger.file.buffer=8192
12-
# 文件日志最大备份数量
13-
logger.file.max.size=30
12+
# 文件日志最大备份时间
13+
logger.file.max.days=30

0 commit comments

Comments
 (0)