Skip to content

Commit 1b5925e

Browse files
litongjavalitongjava
andauthored
add logback to tio-boot (#9690)
* change to for each * add logback --------- Co-authored-by: litongjava <[email protected]>
1 parent 46de0d4 commit 1b5925e

File tree

7 files changed

+116
-109
lines changed

7 files changed

+116
-109
lines changed

frameworks/Java/tio-boot/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@
2727
<groupId>com.litongjava</groupId>
2828
<artifactId>java-db</artifactId>
2929
<version>1.5.0</version>
30+
</dependency>
3031

32+
<dependency>
33+
<groupId>ch.qos.logback</groupId>
34+
<artifactId>logback-classic</artifactId>
35+
<version>1.2.3</version>
3136
</dependency>
37+
3238
<dependency>
3339
<groupId>junit</groupId>
3440
<artifactId>junit</artifactId>
3541
<version>4.12</version>
3642
<scope>test</scope>
3743
</dependency>
3844

39-
4045
<dependency>
4146
<groupId>com.alibaba.fastjson2</groupId>
4247
<artifactId>fastjson2</artifactId>

frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/MainAppConfig.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,6 @@ public class MainAppConfig implements BootConfiguration {
1515

1616
@Override
1717
public void config() throws Exception {
18-
// add route
19-
IndexHandler controller = new IndexHandler();
20-
21-
TioBootServer server = TioBootServer.me();
22-
HttpRequestRouter requestRouter = server.getRequestRouter();
23-
24-
requestRouter.add("/", controller::index);
25-
requestRouter.add("/plaintext", controller::plaintext);
26-
requestRouter.add("/json", controller::json);
27-
28-
DbHandler dbQueryController = new DbHandler();
29-
requestRouter.add("/db", dbQueryController::db);
30-
requestRouter.add("/queries", dbQueryController::queries);
31-
requestRouter.add("/updates", dbQueryController::updates);
32-
requestRouter.add("/fortunes", dbQueryController::fortunes);
33-
34-
CacheHandler cacheController = new CacheHandler();
35-
requestRouter.add("/cachedQuery", cacheController::cachedQuery);
3618

3719
boolean db = EnvUtils.getBoolean("db", true);
3820
if (db) {
@@ -49,6 +31,25 @@ public void config() throws Exception {
4931
} catch (Exception e) {
5032
e.printStackTrace();
5133
}
52-
}
5334

35+
// add route
36+
IndexHandler controller = new IndexHandler();
37+
38+
TioBootServer server = TioBootServer.me();
39+
HttpRequestRouter requestRouter = server.getRequestRouter();
40+
if (requestRouter != null) {
41+
requestRouter.add("/", controller::index);
42+
requestRouter.add("/plaintext", controller::plaintext);
43+
requestRouter.add("/json", controller::json);
44+
45+
DbHandler dbQueryController = new DbHandler();
46+
requestRouter.add("/db", dbQueryController::db);
47+
requestRouter.add("/queries", dbQueryController::queries);
48+
requestRouter.add("/updates", dbQueryController::updates);
49+
requestRouter.add("/fortunes", dbQueryController::fortunes);
50+
51+
CacheHandler cacheController = new CacheHandler();
52+
requestRouter.add("/cachedQuery", cacheController::cachedQuery);
53+
}
54+
}
5455
}
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.litongjava.tio.http.server.controller;
22

3+
import java.util.ArrayList;
34
import java.util.List;
45
import java.util.Map;
5-
import java.util.Objects;
6-
import java.util.stream.Collectors;
76

87
import com.alibaba.fastjson2.JSON;
98
import com.litongjava.db.activerecord.Db;
109
import com.litongjava.db.activerecord.Row;
10+
import com.litongjava.tio.boot.http.TioRequestContext;
1111
import com.litongjava.tio.http.common.HeaderName;
1212
import com.litongjava.tio.http.common.HeaderValue;
1313
import com.litongjava.tio.http.common.HttpRequest;
@@ -16,26 +16,26 @@
1616

1717
public class CacheHandler {
1818
// private Logger log = LoggerFactory.getLogger(this.getClass());
19+
String sql = "SELECT id, randomNumber FROM world WHERE id = ?";
1920

2021
public HttpResponse cachedQuery(HttpRequest request) {
2122
String queries = request.getParam("queries");
22-
List<Map<String, Object>> recordMaps = RandomUtils.randomWorldNumbers()
23-
// limit
24-
.limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
25-
.mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象
26-
.filter(Objects::nonNull) // 过滤掉 null 值
27-
.map(Row::toMap) // 将每个 Record 对象转换为 Map
28-
.collect(Collectors.toList()); // 收集到 List
29-
30-
HttpResponse httpResponse = new HttpResponse(request);
31-
httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
32-
httpResponse.setBody(JSON.toJSONBytes(recordMaps));
33-
return httpResponse;
3423

35-
}
24+
int queryCount = RandomUtils.parseQueryCount(queries);
25+
26+
List<Map<String, Object>> recordMaps = new ArrayList<>();
27+
28+
int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray();
29+
for (int id : randomNumbers) {
30+
Row row = Db.findFirstByCache("world", id, sql, id);
31+
if (row != null) {
32+
recordMaps.add(row.toMap());
33+
}
34+
}
3635

37-
private Row findByIdWithCache(String tableName, int id) {
38-
String sql = "SELECT id, randomNumber FROM world WHERE id = ?";
39-
return Db.findFirstByCache(tableName, id, sql, id);
36+
HttpResponse response = TioRequestContext.getResponse();
37+
response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
38+
response.setBody(JSON.toJSONBytes(recordMaps));
39+
return response;
4040
}
4141
}

frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/DbHandler.java

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55
import java.util.HashMap;
66
import java.util.List;
77
import java.util.Map;
8-
import java.util.Objects;
9-
import java.util.stream.Collectors;
108

119
import com.alibaba.fastjson2.JSON;
1210
import com.jfinal.template.Engine;
1311
import com.jfinal.template.Template;
1412
import com.litongjava.db.activerecord.Db;
1513
import com.litongjava.db.activerecord.Row;
1614
import com.litongjava.ehcache.EhCacheKit;
15+
import com.litongjava.tio.boot.http.TioRequestContext;
1716
import com.litongjava.tio.http.common.HeaderName;
1817
import com.litongjava.tio.http.common.HeaderValue;
1918
import com.litongjava.tio.http.common.HttpRequest;
@@ -23,6 +22,10 @@
2322
import com.litongjava.tio.http.server.utils.RandomUtils;
2423

2524
public class DbHandler {
25+
private Engine engine = Engine.use();
26+
private String filename = "fortunes.html";
27+
private Template template = engine.getTemplate(filename);
28+
private static final byte[] bytes = "{}".getBytes();
2629

2730
public HttpResponse db(HttpRequest request) {
2831
Integer id = request.getInt("id");
@@ -31,7 +34,7 @@ public HttpResponse db(HttpRequest request) {
3134
}
3235

3336
//System.out.println("id:" + id);
34-
HttpResponse httpResponse = new HttpResponse(request);
37+
HttpResponse httpResponse = TioRequestContext.getResponse();
3538

3639
// int id = 11;
3740
// String sql="SELECT id, randomNumber FROM world WHERE id = ?";
@@ -40,7 +43,7 @@ public HttpResponse db(HttpRequest request) {
4043
if (recored != null) {
4144
httpResponse.setBody(JSON.toJSONBytes(recored.toMap()));
4245
} else {
43-
httpResponse.setBody("{}".getBytes());
46+
httpResponse.setBody(bytes);
4447
}
4548

4649
httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
@@ -51,15 +54,19 @@ public HttpResponse db(HttpRequest request) {
5154
// @GetMapping("/queries")
5255
public HttpResponse queries(HttpRequest request) {
5356
String queries = request.getParam("queries");
54-
List<Map<String, Object>> recordMaps = RandomUtils.randomWorldNumbers()
55-
// limit
56-
.limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
57-
.mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象
58-
.filter(Objects::nonNull) // 过滤掉 null 值
59-
.map(Row::toMap) // 将每个 Record 对象转换为 Map
60-
.collect(Collectors.toList()); // 收集到 List
57+
int queryCount = RandomUtils.parseQueryCount(queries);
58+
int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray();
6159

62-
HttpResponse httpResponse = new HttpResponse(request);
60+
List<Map<String, Object>> recordMaps = new ArrayList<>();
61+
62+
for (int id : randomNumbers) {
63+
Row row = Db.findById("world", id);
64+
if (row != null) {
65+
recordMaps.add(row.toMap());
66+
}
67+
}
68+
69+
HttpResponse httpResponse = TioRequestContext.getResponse();
6370
httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
6471
httpResponse.setBody(JSON.toJSONBytes(recordMaps));
6572
return httpResponse;
@@ -71,27 +78,24 @@ public HttpResponse updates(HttpRequest request) {
7178

7279
EhCacheKit.removeAll("world");
7380

74-
List<Map<String, Object>> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers
75-
// limit
76-
.limit(RandomUtils.parseQueryCount(queries))
77-
// map
78-
.mapToObj(id -> Db.findById("world", id))
79-
// not null
80-
.filter(Objects::nonNull).map(record -> {
81-
int currentRandomNumber = record.getInt("randomNumber"); // "randomnumber"
82-
int newRandomNumber;
83-
do {
84-
newRandomNumber = RandomUtils.randomWorldNumber();
85-
} while (newRandomNumber == currentRandomNumber);
86-
87-
record.set("randomnumber", newRandomNumber);
88-
Db.update("world", "id", record); // update
89-
return record;
90-
})
91-
// tomap
92-
.map(Row::toMap)
93-
// to List
94-
.collect(Collectors.toList());
81+
int queryCount = RandomUtils.parseQueryCount(queries);
82+
int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray();
83+
List<Map<String, Object>> updatedRecords = new ArrayList<>();
84+
85+
for (int id : randomNumbers) {
86+
Row row = Db.findById("world", id);
87+
if (row != null) {
88+
int currentRandomNumber = row.getInt("randomNumber"); // "randomnumber"
89+
int newRandomNumber;
90+
do {
91+
newRandomNumber = RandomUtils.randomWorldNumber();
92+
} while (newRandomNumber == currentRandomNumber);
93+
94+
row.set("randomnumber", newRandomNumber);
95+
Db.update("world", "id", row); // update
96+
updatedRecords.add(row.toMap());
97+
}
98+
}
9599

96100
HttpResponse httpResponse = new HttpResponse(request);
97101
httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
@@ -116,11 +120,8 @@ public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException,
116120
viewData.put("fortunes", fortunes);
117121

118122
// 转换为 HTML
119-
Engine engine = Engine.use();
120-
String filename = "fortunes.html";
121-
Template template = engine.getTemplate(filename);
122123
String html = template.renderToString(viewData);
123-
124-
return Resps.html(request, html);
124+
HttpResponse httpResponse = TioRequestContext.getResponse();
125+
return Resps.html(httpResponse, html);
125126
}
126127
}

frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/IndexHandler.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.litongjava.tio.http.server.controller;
22

33
import com.alibaba.fastjson2.JSON;
4+
import com.litongjava.tio.boot.http.TioRequestContext;
45
import com.litongjava.tio.http.common.HeaderName;
56
import com.litongjava.tio.http.common.HeaderValue;
67
import com.litongjava.tio.http.common.HttpRequest;
@@ -22,19 +23,16 @@ public HttpResponse index(HttpRequest request) {
2223
}
2324

2425
public HttpResponse plaintext(HttpRequest request) {
25-
// 更高性能的写法
26-
HttpResponse ret = new HttpResponse(request);
27-
ret.setBody(HELLO_WORLD_BYTES);
28-
ret.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_TXT);
29-
return ret;
26+
HttpResponse response = TioRequestContext.getResponse();
27+
response.setBody(HELLO_WORLD_BYTES);
28+
response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_TXT);
29+
return response;
3030
}
3131

32-
// 在IndexController中添加
3332
public HttpResponse json(HttpRequest request) {
34-
// 更高性能的写法
35-
HttpResponse ret = new HttpResponse(request);
36-
ret.setBody(JSON.toJSONString(new Message(HELLO_WORLD)).getBytes());
37-
ret.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
38-
return ret;
33+
HttpResponse response = TioRequestContext.getResponse();
34+
response.setBody(JSON.toJSONBytes(new Message(HELLO_WORLD)));
35+
response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
36+
return response;
3937
}
40-
}
38+
}
Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
2-
<configuration>
3-
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
2+
<configuration debug="false" xmlns="http://ch.qos.logback/xml/ns/logback" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd
4+
http://ch.qos.logback/xml/ns/logback ">
5+
6+
<!-- 定义日志文件的存储地址,避免在 Logback 的配置中使用相对路径 -->
47
<property name="LOG_HOME" value="logs" />
5-
<!--格式化输出:%d表示日期,%-6level:日志级别从左显示6个字符宽度,%m:日志消息,%n是换行符 -->
6-
<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-6level%logger{0}.%M:%L - %m%n" />
8+
9+
<!-- 格式化输出:%d 表示日期,[%thread] 输出线程名称,%-6level 表示日志级别占6个字符宽度,%logger{1}.%M:%L 表示类名、方法名和行号,%m 表示日志消息,%n 是换行符 -->
10+
<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-6level %logger{1}.%M:%L - %m%n" />
711

812
<!-- 控制台输出 -->
913
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
@@ -12,41 +16,40 @@
1216
</encoder>
1317
</appender>
1418

15-
<!-- 按照每天生成日志文件 -->
19+
<!-- 按照每小时生成日志文件 -->
1620
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
1721
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
1822
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
1923
</encoder>
20-
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
21-
<!--日志文件输出的文件名 -->
22-
<fileNamePattern>${LOG_HOME}/project-name-%d{yyyy-MM-dd}.log</fileNamePattern>
23-
<!--日志文件保留天数 -->
24+
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
25+
<!-- 日志文件输出的文件名,包含日期和小时 -->
26+
<fileNamePattern>${LOG_HOME}/log.%d{yyyyMMddHH}.%i.log</fileNamePattern>
27+
<!-- 日志文件保留天数 -->
2428
<maxHistory>180</maxHistory>
29+
<!-- 每个日志文件的最大大小 -->
30+
<maxFileSize>100MB</maxFileSize>
2531
</rollingPolicy>
26-
<!--日志文件最大的大小 -->
27-
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
28-
<maxFileSize>10MB</maxFileSize>
29-
</triggeringPolicy>
3032
</appender>
31-
32-
<!--专为 spring 定制 -->
33+
34+
<!-- Spring 框架日志级别设置 -->
3335
<logger name="org.springframework" level="info" />
34-
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
36+
37+
<!-- Hibernate 日志级别设置,显示 SQL 语句和绑定参数 -->
3538
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
3639
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
3740
<logger name="org.hibernate.SQL" level="DEBUG" />
3841
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
3942
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
4043

41-
<!--myibatis log configure -->
44+
<!-- MyBatis 和 SQL 相关日志配置 -->
4245
<logger name="com.apache.ibatis" level="TRACE" />
4346
<logger name="java.sql.Connection" level="DEBUG" />
4447
<logger name="java.sql.Statement" level="DEBUG" />
4548
<logger name="java.sql.PreparedStatement" level="DEBUG" />
4649

47-
<!-- 日志输出级别 和输出源 -->
50+
<!-- 根日志记录器的日志级别和输出目标 -->
4851
<root level="info">
4952
<appender-ref ref="STDOUT" />
5053
<appender-ref ref="FILE" />
5154
</root>
52-
</configuration>
55+
</configuration>

frameworks/Java/tio-boot/src/test/java/com/litongjava/tio/http/server/MainAppTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66

77
public class MainAppTest {
88

9-
@Test
9+
// @Test
1010
public void test() {
1111
boolean boolean1 = EnvUtils.getBoolean("native", false);
1212
System.out.println(boolean1);
1313
}
14-
1514
}

0 commit comments

Comments
 (0)