我在两个类上使用Spring @Async.两者都最终实现了一个接口.我正在创建两个单独的ThreadPoolTaskExecutor,因此每个类都有自己的ThreadPool来处理.但是由于我认为使用代理以及Spring如何实现异步类,我必须将@Async注释放在基接口上.因此,两个类最终都使用相同的ThreadPoolTaskExecutor.是否有可能告诉Spring对于这个Bean(在这种情况下我调用实现该接口的类的一个Service),使用这个ThreadPoolTaskExecutor.
我希望能够将一些由 logstash logback 编码器生成的字段包装在另一个字段中。这可以通过 logback-spring.xml 中的 XML 配置来完成,还是我必须实现一些类然后在配置中引用它?
我尝试阅读有关实现 Factory 和 Decorator 方法的文章,但它似乎并没有让我获得任何帮助。
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/Users/name/dev/test.log
</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>/Users/name/dev/log/test.%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"component":"webserver","datacenter":"ord"}
</customFields>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
某些日志时我得到的当前 JSON 是:
{
"@timestamp": "2019-07-18T18:12:49.431-07:00",
"@version": "1",
"message": "Application shutdown requested.",
"logger_name": "org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin",
"thread_name": "RMI TCP Connection(2)-127.0.0.1",
"level": "INFO",
"level_value": 20000,
"component": "webserver",
"datacenter": "ord"
}
Run Code Online (Sandbox Code Playgroud)
我想要的是:
{
"@timestamp": "2019-07-18T18:12:49.431-07:00",
"@version": "1",
"component": "webserver",
"datacenter": "ord",
"data": {
"message": "Application shutdown requested.",
"logger_name": "org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin",
"thread_name": …Run Code Online (Sandbox Code Playgroud) json logback logstash logstash-logback-encoder spring-logback