Skip to content

Commit 3725772

Browse files
committed
ApiBoot Logging 自动化配置调整
1 parent a087535 commit 3725772

File tree

4 files changed

+257
-13
lines changed

4 files changed

+257
-13
lines changed

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingAutoConfiguration.java

Lines changed: 146 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,41 @@
1818
package org.minbox.framework.api.boot.autoconfigure.logging;
1919

2020
import org.minbox.framework.api.boot.plugin.logging.ApiBootLog;
21+
import org.minbox.framework.api.boot.plugin.logging.admin.discovery.LoggingAdminDiscovery;
22+
import org.minbox.framework.api.boot.plugin.logging.admin.discovery.support.LoggingAppointAdminDiscovery;
23+
import org.minbox.framework.api.boot.plugin.logging.admin.discovery.support.LoggingRegistryCenterAdminDiscovery;
24+
import org.minbox.framework.api.boot.plugin.logging.admin.report.LoggingAdminReport;
25+
import org.minbox.framework.api.boot.plugin.logging.admin.report.LoggingReportScheduled;
26+
import org.minbox.framework.api.boot.plugin.logging.admin.report.support.LoggingAdminReportSupport;
27+
import org.minbox.framework.api.boot.plugin.logging.cache.LoggingCache;
28+
import org.minbox.framework.api.boot.plugin.logging.cache.support.LoggingMemoryCache;
2129
import org.minbox.framework.api.boot.plugin.logging.filter.ApiBootLoggingBodyFilter;
2230
import org.minbox.framework.api.boot.plugin.logging.interceptor.ApiBootLoggingInterceptor;
2331
import org.minbox.framework.api.boot.plugin.logging.notice.away.ApiBootLogStorageNotice;
2432
import org.minbox.framework.api.boot.plugin.logging.notice.ApiBootLoggingNoticeListener;
2533
import org.minbox.framework.api.boot.plugin.logging.notice.ApiBootLogNotice;
34+
import org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingAdminStorageNotice;
2635
import org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingLocalStorageNotice;
2736
import org.minbox.framework.api.boot.plugin.logging.span.ApiBootLoggingSpan;
2837
import org.minbox.framework.api.boot.plugin.logging.span.support.ApiBootLoggingDefaultSpan;
2938
import org.minbox.framework.api.boot.plugin.logging.tracer.ApiBootLoggingTracer;
3039
import org.minbox.framework.api.boot.plugin.logging.tracer.support.ApiBootLoggingDefaultTracer;
3140
import org.springframework.beans.factory.ObjectProvider;
3241
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
33-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
34-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
42+
import org.springframework.boot.autoconfigure.condition.*;
3543
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
3644
import org.springframework.boot.context.properties.EnableConfigurationProperties;
45+
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
3746
import org.springframework.context.annotation.Bean;
3847
import org.springframework.context.annotation.Configuration;
3948
import org.springframework.core.env.ConfigurableEnvironment;
49+
import org.springframework.web.client.RestTemplate;
4050
import org.springframework.web.servlet.HandlerInterceptor;
4151
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
4252
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
4353

54+
import static org.minbox.framework.api.boot.autoconfigure.logging.ApiBootLoggingProperties.API_BOOT_LOGGING_PREFIX;
55+
4456
import java.util.List;
4557

4658
/**
@@ -55,9 +67,10 @@
5567
* GitHub:https://github.com/hengboy
5668
*/
5769
@Configuration
58-
@ConditionalOnClass({ApiBootLog.class, HandlerInterceptor.class})
70+
@ConditionalOnClass(ApiBootLoggingInterceptor.class)
5971
@EnableConfigurationProperties(ApiBootLoggingProperties.class)
6072
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
73+
@ConditionalOnWebApplication
6174
public class ApiBootLoggingAutoConfiguration implements WebMvcConfigurer {
6275
/**
6376
* ApiBoot Logging Properties
@@ -117,31 +130,81 @@ public ApiBootLoggingBodyFilter apiBootLoggingFilter() {
117130
return new ApiBootLoggingBodyFilter();
118131
}
119132

133+
/**
134+
* ApiBoot Logging Console Notice Listener
135+
*
136+
* @param apiBootLogStorageNotice ApiBoot Logging Notice Support Instance
137+
* @return ApiBootLoggingNoticeListener
138+
* @see ApiBootLoggingLocalStorageNotice
139+
* @see org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingAdminStorageNotice
140+
* @see org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingLocalStorageNotice
141+
*/
142+
@Bean
143+
public ApiBootLoggingNoticeListener apiBootLoggingNoticeListener(ApiBootLogStorageNotice apiBootLogStorageNotice) {
144+
return new ApiBootLoggingNoticeListener(apiBootLogStorageNotice, apiBootLoggingProperties.isFormatConsoleLogJson());
145+
}
146+
147+
120148
/**
121149
* ApiBoot Logging Local Notice
122150
*
123151
* @return ApiBootLoggingLocalStorageNotice
124152
*/
125153
@Bean
126-
@ConditionalOnMissingBean
154+
@ConditionalOnMissingBean(LoggingAdminDiscovery.class)
127155
public ApiBootLoggingLocalStorageNotice apiBootLoggingLocalNotice(ObjectProvider<List<ApiBootLogNotice>> localNoticeObjectProvider) {
128156
return new ApiBootLoggingLocalStorageNotice(localNoticeObjectProvider.getIfAvailable());
129157
}
130158

131159
/**
132-
* ApiBoot Logging Console Notice Listener
160+
* ApiBoot Logging Admin Notice
133161
*
134-
* @param apiBootLogStorageNotice ApiBoot Logging Notice Support Instance
135-
* @return ApiBootLoggingNoticeListener
136-
* @see ApiBootLoggingLocalStorageNotice
137-
* @see org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingRestStorageNotice
138-
* @see org.minbox.framework.api.boot.plugin.logging.notice.away.support.ApiBootLoggingMqStorageNotice
162+
* @return ApiBootLoggingAdminStorageNotice
139163
*/
140164
@Bean
141-
public ApiBootLoggingNoticeListener apiBootLoggingNoticeListener(ApiBootLogStorageNotice apiBootLogStorageNotice) {
142-
return new ApiBootLoggingNoticeListener(apiBootLogStorageNotice);
165+
@ConditionalOnMissingBean
166+
@ConditionalOnBean(LoggingAdminDiscovery.class)
167+
public ApiBootLoggingAdminStorageNotice apiBootLoggingAdminStorageNotice(LoggingCache loggingCache) {
168+
return new ApiBootLoggingAdminStorageNotice(loggingCache);
143169
}
144170

171+
/**
172+
* Logging Memory Cache
173+
*
174+
* @return LoggingMemoryCache
175+
*/
176+
@Bean
177+
@ConditionalOnProperty(prefix = API_BOOT_LOGGING_PREFIX, name = "logging-cache-away", havingValue = "memory", matchIfMissing = true)
178+
@ConditionalOnMissingBean
179+
public LoggingCache loggingMemoryCache() {
180+
return new LoggingMemoryCache();
181+
}
182+
183+
/**
184+
* Logging Admin Report
185+
*
186+
* @param loggingAdminDiscovery Logging Admin Discovery
187+
* @param restTemplate RestTemplate
188+
* @param loggingCache Logging Cache
189+
* @return LoggingAdminReportSupport
190+
*/
191+
@Bean
192+
@ConditionalOnMissingBean
193+
public LoggingAdminReport loggingAdminReportSupport(LoggingAdminDiscovery loggingAdminDiscovery, RestTemplate restTemplate, LoggingCache loggingCache, ConfigurableEnvironment environment) {
194+
return new LoggingAdminReportSupport(loggingAdminDiscovery, restTemplate, loggingCache, apiBootLoggingProperties.getNumberOfRequestLog(), environment);
195+
}
196+
197+
/**
198+
* Logging Report Scheduled Task Job
199+
*
200+
* @param loggingAdminReport Logging Admin Report
201+
* @return LoggingReportScheduled
202+
*/
203+
@Bean
204+
@ConditionalOnMissingBean
205+
public LoggingReportScheduled loggingReportScheduled(LoggingAdminReport loggingAdminReport) {
206+
return new LoggingReportScheduled(loggingAdminReport, apiBootLoggingProperties.getReportInitialDelaySecond(), apiBootLoggingProperties.getReportIntervalSecond());
207+
}
145208

146209
/**
147210
* registry logging interceptor
@@ -152,4 +215,75 @@ public ApiBootLoggingNoticeListener apiBootLoggingNoticeListener(ApiBootLogStora
152215
public void addInterceptors(InterceptorRegistry registry) {
153216
registry.addInterceptor(apiBootLoggingInterceptor()).addPathPatterns(apiBootLoggingProperties.getLoggingPathPrefix());
154217
}
218+
219+
/**
220+
* Rest Template Instance
221+
*
222+
* @return RestTemplate
223+
*/
224+
@Bean
225+
@ConditionalOnMissingBean
226+
public RestTemplate restTemplate() {
227+
return new RestTemplate();
228+
}
229+
230+
/**
231+
* ApiBoot Logging Admin Appoint Away
232+
*/
233+
@Configuration
234+
@EnableConfigurationProperties(ApiBootLoggingProperties.class)
235+
@ConditionalOnMissingBean(LoggingRegistryCenterAdminDiscovery.class)
236+
@ConditionalOnProperty(prefix = API_BOOT_LOGGING_PREFIX, name = "admin.server-address", matchIfMissing = true)
237+
public static class ApiBootLoggingAdminAppointAutoConfiguration {
238+
/**
239+
* ApiBoot Logging Properties
240+
*/
241+
private ApiBootLoggingProperties apiBootLoggingProperties;
242+
243+
public ApiBootLoggingAdminAppointAutoConfiguration(ApiBootLoggingProperties apiBootLoggingProperties) {
244+
this.apiBootLoggingProperties = apiBootLoggingProperties;
245+
}
246+
247+
/**
248+
* ApiBoot Logging Admin Config Discovery
249+
* Multiple Use "," Separation
250+
*
251+
* @return LoggingAdminDiscovery
252+
*/
253+
@Bean
254+
@ConditionalOnMissingBean
255+
public LoggingAppointAdminDiscovery loggingConfigAdminDiscovery() {
256+
String[] serverAddressArray = apiBootLoggingProperties.getAdmin().getServerAddress().split(",");
257+
return new LoggingAppointAdminDiscovery(serverAddressArray);
258+
}
259+
}
260+
261+
/**
262+
* ApiBoot Logging Admin Discovery Away
263+
*/
264+
@Configuration
265+
@ConditionalOnClass(LoadBalancerClient.class)
266+
@EnableConfigurationProperties(ApiBootLoggingProperties.class)
267+
@ConditionalOnProperty(prefix = API_BOOT_LOGGING_PREFIX, name = "discovery.service-id")
268+
public static class ApiBootLoggingAdminDiscoveryAutoConfiguration {
269+
/**
270+
* ApiBoot Logging Properties
271+
*/
272+
private ApiBootLoggingProperties apiBootLoggingProperties;
273+
274+
public ApiBootLoggingAdminDiscoveryAutoConfiguration(ApiBootLoggingProperties apiBootLoggingProperties) {
275+
this.apiBootLoggingProperties = apiBootLoggingProperties;
276+
}
277+
278+
/**
279+
* ApiBoot Logging Admin Registry Center Discovery
280+
*
281+
* @return LoggingRegistryCenterAdminDiscovery
282+
*/
283+
@Bean
284+
@ConditionalOnMissingBean
285+
public LoggingRegistryCenterAdminDiscovery loggingRegistryCenterAdminDiscovery(LoadBalancerClient loadBalancerClient) {
286+
return new LoggingRegistryCenterAdminDiscovery(apiBootLoggingProperties.getDiscovery().getServiceId(), apiBootLoggingProperties.getDiscovery().getUsername(), apiBootLoggingProperties.getDiscovery().getPassword(), loadBalancerClient);
287+
}
288+
}
155289
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingOpenfeignAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* GitHub:https://github.com/hengboy
3838
*/
3939
@Configuration
40-
@ConditionalOnClass(RequestInterceptor.class)
40+
@ConditionalOnClass({RequestInterceptor.class, ApiBootLogOpenFeignInterceptor.class})
4141
@EnableConfigurationProperties(ApiBootLoggingProperties.class)
4242
public class ApiBootLoggingOpenfeignAutoConfiguration {
4343

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingProperties.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public class ApiBootLoggingProperties {
4343
* ApiBoot logging properties config prefix
4444
*/
4545
public static final String API_BOOT_LOGGING_PREFIX = "api.boot.logging";
46+
/**
47+
* ApiBoot Logging Admin Default Url
48+
*/
49+
public static final String DEFAULT_URL = "http://localhost:8532";
4650
/**
4751
* Interception log path prefix
4852
*/
@@ -51,4 +55,67 @@ public class ApiBootLoggingProperties {
5155
* Ignore path array
5256
*/
5357
private String[] ignorePaths;
58+
/**
59+
* Format console log JSON
60+
*/
61+
private boolean formatConsoleLogJson = false;
62+
/**
63+
* Number of request logs reported once
64+
*/
65+
private int numberOfRequestLog = 10;
66+
/**
67+
* report to admin initial delay second
68+
*/
69+
private int reportInitialDelaySecond = 5;
70+
/**
71+
* report to admin interval second
72+
*/
73+
private int reportIntervalSecond = 5;
74+
/**
75+
* logging cache away
76+
*/
77+
private LoggingCacheAway loggingCacheAway = LoggingCacheAway.memory;
78+
/**
79+
* ApiBoot Logging Admin Instance
80+
*/
81+
private AdminInstance admin = new AdminInstance();
82+
/**
83+
* ApiBoot Logging Discovery Instance
84+
* support eureka
85+
*/
86+
private DiscoveryInstance discovery;
87+
88+
/**
89+
* Config ApiBoot Logging Admin Server
90+
* report every request log to api-boot-logging-admin
91+
*/
92+
@Data
93+
public static class AdminInstance {
94+
/**
95+
* ApiBoot Logging Admin Server Address
96+
*/
97+
private String serverAddress = DEFAULT_URL;
98+
99+
}
100+
101+
/**
102+
* Config ApiBoot Logging Discovery Instance
103+
* Draw the list of ApiBoot Logging Admin addresses from the registry
104+
* and report the request log through load balancing
105+
*/
106+
@Data
107+
public static class DiscoveryInstance {
108+
/**
109+
* ApiBoot Logging Admin Spring Security Username
110+
*/
111+
private String username;
112+
/**
113+
* ApiBoot Logging Admin Spring Security User Password
114+
*/
115+
private String password;
116+
/**
117+
* ApiBoot Logging Admin Service ID
118+
*/
119+
private String serviceId;
120+
}
54121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright [2019] [恒宇少年 - 于起宇]
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
18+
package org.minbox.framework.api.boot.autoconfigure.logging;
19+
20+
import lombok.Getter;
21+
22+
/**
23+
* ApiBoot Logging Cache Away
24+
*
25+
* @author:恒宇少年 - 于起宇
26+
* <p>
27+
* DateTime:2019-07-22 09:12
28+
* Blog:http://blog.yuqiyu.com
29+
* WebSite:http://www.jianshu.com/u/092df3f77bca
30+
* Gitee:https://gitee.com/hengboy
31+
* GitHub:https://github.com/hengboy
32+
*/
33+
@Getter
34+
public enum LoggingCacheAway {
35+
/**
36+
* cache request log to memory
37+
*/
38+
memory,
39+
/**
40+
* append request log to file
41+
*/
42+
file
43+
}

0 commit comments

Comments
 (0)