Я использую эти зависимости:
compile 'org.springframework.cloud:spring-cloud-starter-zipkin'
compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
compile 'org.springframework.cloud:spring-cloud-sleuth-zipkin'
Есть ли возможность добавить текущий активный профиль (ы) в каждую строку журнала? Это позволит фильтровать журналы на основе профилей в Splunk / ELK / ...
Так что вместо
2017-03-13 13:38:30.465 INFO [app,,,] 19220 --- [ main] com.company.app.Application : Started Application in 20.682 seconds (JVM running for 22.166)
он должен регистрировать
2017-03-13 13:38:30.465 INFO [app,,,] [dev] 19220 --- [ main] com.company.app.Application : Started Application in 20.682 seconds (JVM running for 22.166)
РЕДАКТИРОВАТЬ: Основываясь на ответе Марцина, я реализовал его следующим образом:
application.yml
logging:
pattern:
level: "%X{profiles} %5p"
ProfileLogger.java
public class ProfileLogger implements SpanLogger {
private final Environment environment;
private final Logger log;
private final Pattern nameSkipPattern;
@Autowired
public ProfileLogger(String nameSkipPattern, final Environment environment) {
this.nameSkipPattern = Pattern.compile(nameSkipPattern);
this.environment = environment;
this.log = org.slf4j.LoggerFactory.getLogger(this.getClass());
}
private void setProfiles() {
MDC.put("profiles", Arrays.toString(environment.getActiveProfiles()));
}
@Override
public void logStartedSpan(Span parent, Span span) {
setProfiles();
...
}
... // (as https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanLogger.java)
}
LogConfig.java
@Configuration
public class LogConfig {
private final Environment environment;
@Autowired
public LogConfig(final Environment environment) {
this.environment = environment;
}
@Bean
SpanLogger getLogger() {
return new ProfileLogger("", environment);
}
}
Это печатает журналы, подобные следующим:
2017-03-13 14:47:02.796 INFO 22481 --- [ main] com.company.app.Application : Started Application in 16.115 seconds (JVM running for 16.792)
2017-03-13 14:47:32.684 [localhost, swagger] TRACE 22481 --- [pool-2-thread-1] c.c.app.config.ProfileLogger : Starting span: [Trace: bfcdd2ce866efbff, Span: bfcdd2ce866efbff, Parent: null, exportable:true]
Это уже хорошо, но еще не совсем то, что я ищу. Я хотел бы добавить профиль с самого начала -> даже «Запущенное приложение» должно содержать профиль - если возможно. Во-вторых, я бы хотел переместить profiles
между INFO
и 22481
.
Еще один вопрос возник во время реализации: в связанной реализации есть это утверждение:
if (this.log.isTraceEnabled()) {
this.log.trace(text, span);
}
Означает ли это, что вы отправляете трассировки только в том случае, если для уровня журнала задано значение TRACE? Если да, то как я могу улучшить ведение журнала в стандартный вывод с помощью этого подхода (учитывая уровень журнала debug / info / warn)? Я думаю, что шаблон журнала переопределяется Sleuth / Zipkin при импорте зависимостей, и, таким образом, локальное ведение журнала выглядит так же, как трассировка. В конце концов, я заинтересован в том, чтобы профиль отображался как в локальном стандартном выводе, так и в Zipkin.
РЕДАКТИРОВАТЬ 2: с помощью Marcin я изменил шаблон, добавив resources/logback-spring.xml
файл, содержащий следующие строки:
<springProperty scope="context" name="activeSpringProfiles" source="spring.profiles.active"/>
<!-- Example for logging into the build folder of your project -->
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${activeSpringProfiles:-}"/>
<!-- You can override this to have a custom pattern -->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) [${activeSpringProfiles:-}] %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
Обратите внимание, что вам также необходимо добавить файл bootstrap.yml
, чтобы имя приложения отображалось правильно. Без файла bootstrap.yml
приведенный выше шаблон журнала просто печатает "bootstrap" как имя приложения.
bootstrap.yml
просто содержит
spring:
application:
name: app
в моем случае. Все остальное настраивается в приложении- [профиль] .yml
Теперь все работает как надо:
2017-03-13 15:58:21.291 INFO [app,,,] [localhost,swagger] 27519 --- [ main] com.company.app.keyserver.Application : Started Application in 17.565 seconds (JVM running for 18.232)
logback-spring.xml
способ, как здесь - github.com/spring-cloud-samples/sleuth-documentation-apps/blob/. Я разрешаю имя приложения там, поэтому, может быть, вы могли бы сделать то же самое с активными профилями, и вам не нужно было писать какой-либо код? Вы можете попробовать сделать это и ответить, если все прошло хорошо. - person Marcin Grzejszczak   schedule 13.03.2017logback-spring.xml
подход и снова отправлю пинг с результатом. Большое тебе спасибо. - person user3105453   schedule 13.03.2017logback-spring.xml
:) - person Marcin Grzejszczak   schedule 13.03.2017