Skip to content

Commit 8cee7bd

Browse files
Merge pull request #175 from HasonHuang/2.x
feat: 支持使用注解自定义日志 logger 名字
2 parents 9f8da02 + b72afb8 commit 8cee7bd

File tree

6 files changed

+181
-4
lines changed

6 files changed

+181
-4
lines changed

src/main/java/com/github/lianjiatech/retrofit/spring/boot/log/GlobalLogProperty.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public class GlobalLogProperty {
1414
*/
1515
private boolean enable = true;
1616

17+
/**
18+
* logger 名字,默认为{@link LoggingInterceptor} 的全类名
19+
*/
20+
private String logger = LoggingInterceptor.class.getName();
21+
1722
/**
1823
* 日志打印级别,支持的日志级别参见{@link LogLevel}
1924
* Log printing level, see {@link LogLevel} for supported log levels

src/main/java/com/github/lianjiatech/retrofit/spring/boot/log/Logging.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@
2424
*/
2525
boolean enable() default true;
2626

27+
/**
28+
* 设置 logger 名字,效果相当于 {@code LoggerFactory.getLogger(logger)}。
29+
* <p>
30+
* 默认值为 {@link LoggingInterceptor} 的全类名。
31+
* <p>如果为空,使用默认值。</p>
32+
*
33+
* @return logger 名字
34+
*/
35+
String logger() default "";
36+
2737
/**
2838
* 日志打印级别,支持的日志级别参见{@link LogLevel}
2939
* 如果为NULL,则取全局日志打印级别

src/main/java/com/github/lianjiatech/retrofit/spring/boot/log/LoggingInterceptor.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.github.lianjiatech.retrofit.spring.boot.log;
22

33
import com.github.lianjiatech.retrofit.spring.boot.util.AnnotationExtendUtils;
4-
import lombok.extern.slf4j.Slf4j;
54
import okhttp3.Interceptor;
65
import okhttp3.Request;
76
import okhttp3.Response;
87
import okhttp3.logging.HttpLoggingInterceptor;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
910
import retrofit2.Invocation;
1011

1112
import java.io.IOException;
@@ -14,7 +15,6 @@
1415
* @author 陈添明
1516
* @since 2022/4/30 8:21 下午
1617
*/
17-
@Slf4j
1818
public class LoggingInterceptor implements Interceptor {
1919

2020
protected final GlobalLogProperty globalLogProperty;
@@ -33,9 +33,11 @@ public Response intercept(Chain chain) throws IOException {
3333
if (logStrategy == LogStrategy.NONE) {
3434
return chain.proceed(chain.request());
3535
}
36+
3637
LogLevel logLevel = logging == null ? globalLogProperty.getLogLevel() : logging.logLevel();
3738
boolean aggregate = logging == null ? globalLogProperty.isAggregate() : logging.aggregate();
38-
HttpLoggingInterceptor.Logger matchLogger = matchLogger(logLevel);
39+
String loggerName = logging == null || logging.logger().isEmpty() ? globalLogProperty.getLogger() : logging.logger();
40+
HttpLoggingInterceptor.Logger matchLogger = matchLogger(loggerName, logLevel);
3941
HttpLoggingInterceptor.Logger logger = aggregate ? new BufferingLogger(matchLogger) : matchLogger;
4042
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(logger)
4143
.setLevel(HttpLoggingInterceptor.Level.valueOf(logStrategy.name()));
@@ -66,7 +68,8 @@ protected boolean needLog(Logging logging) {
6668
}
6769
}
6870

69-
protected HttpLoggingInterceptor.Logger matchLogger(LogLevel level) {
71+
protected HttpLoggingInterceptor.Logger matchLogger(String loggerName, LogLevel level) {
72+
Logger log = LoggerFactory.getLogger(loggerName);
7073
if (level == LogLevel.DEBUG) {
7174
return log::debug;
7275
} else if (level == LogLevel.ERROR) {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.github.lianjiatech.retrofit.spring.boot.test.integration.log;
2+
3+
import ch.qos.logback.classic.Logger;
4+
import ch.qos.logback.classic.spi.ILoggingEvent;
5+
import ch.qos.logback.core.AppenderBase;
6+
import com.github.lianjiatech.retrofit.spring.boot.log.GlobalLogProperty;
7+
import com.github.lianjiatech.retrofit.spring.boot.log.Logging;
8+
import com.github.lianjiatech.retrofit.spring.boot.test.integration.MockWebServerTest;
9+
import com.github.lianjiatech.retrofit.spring.boot.test.integration.RetrofitBootApplication;
10+
import com.github.lianjiatech.retrofit.spring.boot.test.integration.entity.User;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
import org.junit.runner.RunWith;
14+
import org.slf4j.LoggerFactory;
15+
import org.springframework.beans.factory.annotation.Autowired;
16+
import org.springframework.boot.test.context.SpringBootTest;
17+
import org.springframework.test.context.junit4.SpringRunner;
18+
19+
import static org.junit.Assert.assertEquals;
20+
21+
/**
22+
* Tests for {@link Logging#logger()} based on logback
23+
*
24+
* @author Hason
25+
*/
26+
@SpringBootTest(classes = {RetrofitBootApplication.class})
27+
@RunWith(SpringRunner.class)
28+
public class CustomLoggerTest extends MockWebServerTest {
29+
30+
@Autowired
31+
private CustomLoggerUserService service;
32+
33+
@Autowired
34+
private DefaultLoggerUserService defaultLoggerUserService;
35+
36+
private TestAppender testAppender;
37+
38+
@Before
39+
public void setup() {
40+
testAppender = new TestAppender();
41+
}
42+
43+
@Test
44+
public void shouldEqualsDefaultLogger() {
45+
// given
46+
GlobalLogProperty property = new GlobalLogProperty();
47+
Logger logger = (Logger) LoggerFactory.getLogger(property.getLogger());
48+
logger.addAppender(testAppender);
49+
testAppender.start();
50+
51+
mockServerReturnString(MIKE);
52+
53+
// when
54+
defaultLoggerUserService.getName(Long100);
55+
56+
// then 应当使用类的logger打印日志
57+
assertEquals(property.getLogger(), testAppender.lastEvent.getLoggerName());
58+
}
59+
60+
@Test
61+
public void shouldEqualsClassLogger() {
62+
// given
63+
Logger logger = (Logger) LoggerFactory.getLogger(CustomLoggerUserService.LOGGER);
64+
logger.addAppender(testAppender);
65+
testAppender.start();
66+
67+
mockServerReturnString(MIKE);
68+
69+
// when
70+
service.getName(Long100);
71+
72+
// then 应当使用类的logger打印日志
73+
assertEquals(CustomLoggerUserService.LOGGER, testAppender.lastEvent.getLoggerName());
74+
}
75+
76+
@Test
77+
public void shouldEqualsMethodLogger() {
78+
// given
79+
Logger logger = (Logger) LoggerFactory.getLogger(CustomLoggerUserService.LOGGER);
80+
logger.addAppender(testAppender);
81+
testAppender.start();
82+
83+
mockServerReturnObject(USER_MIKE);
84+
85+
// when
86+
User user = service.getUser(Long100);
87+
88+
// then 应当使用类的logger打印日志
89+
assertEquals(CustomLoggerUserService.LOGGER + ".getUser", testAppender.lastEvent.getLoggerName());
90+
}
91+
92+
static class TestAppender extends AppenderBase<ILoggingEvent> {
93+
private ILoggingEvent lastEvent;
94+
95+
@Override
96+
protected void append(ILoggingEvent event) {
97+
this.lastEvent = event;
98+
}
99+
}
100+
101+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.github.lianjiatech.retrofit.spring.boot.test.integration.log;
2+
3+
import com.github.lianjiatech.retrofit.spring.boot.core.RetrofitClient;
4+
import com.github.lianjiatech.retrofit.spring.boot.log.LogStrategy;
5+
import com.github.lianjiatech.retrofit.spring.boot.log.Logging;
6+
import com.github.lianjiatech.retrofit.spring.boot.test.integration.entity.User;
7+
import retrofit2.http.GET;
8+
import retrofit2.http.POST;
9+
import retrofit2.http.Query;
10+
11+
import java.util.List;
12+
13+
/**
14+
* 测试自定义 logger 的客户端
15+
*
16+
* @author Hason
17+
*/
18+
@RetrofitClient(baseUrl = "${test.baseUrl}")
19+
@Logging(logger = CustomLoggerUserService.LOGGER)
20+
public interface CustomLoggerUserService {
21+
22+
String LOGGER = "CustomLoggerUserService";
23+
24+
/**
25+
* 根据id查询用户姓名
26+
*/
27+
@POST("getName")
28+
String getName(@Query("id") Long id);
29+
30+
/**
31+
* 根据id查询用户信息
32+
*/
33+
@GET("getUser")
34+
@Logging(logStrategy = LogStrategy.BODY, logger = CustomLoggerUserService.LOGGER + ".getUser")
35+
User getUser(@Query("id") Long id);
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.github.lianjiatech.retrofit.spring.boot.test.integration.log;
2+
3+
import com.github.lianjiatech.retrofit.spring.boot.core.RetrofitClient;
4+
import retrofit2.http.POST;
5+
import retrofit2.http.Query;
6+
7+
/**
8+
* 测试默认 logger 的客户端
9+
*
10+
* @author Hason
11+
*/
12+
@RetrofitClient(baseUrl = "${test.baseUrl}")
13+
public interface DefaultLoggerUserService {
14+
15+
/**
16+
* 根据id查询用户姓名
17+
*/
18+
@POST("getName")
19+
String getName(@Query("id") Long id);
20+
21+
}

0 commit comments

Comments
 (0)