Skip to content

Commit

Permalink
Рефакторинг, вывод даты, javadoc
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jul 26, 2023
1 parent da60e68 commit 3bd07d3
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,42 +29,66 @@
import lombok.Setter;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
import org.eclipse.lsp4j.services.LanguageClient;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.Map;

/**
* Расширение штатного {@link ConsoleAppender}, выводящего сообщения
* в {@link org.eclipse.lsp4j.services.LanguageClient}, если он подключен,
* или в штатные потоки вывода в обратном случае.
*/
public class LanguageClientAwareAppender
extends ConsoleAppender<ILoggingEvent> {

/**
* Singletone-like хранилище проинициализированного инфраструктурой Logback аппендера
* для последующего возврата его через {@link LogbackConfiguration#languageClientAwareAppender()}.
*/
protected static LanguageClientAwareAppender INSTANCE;

private static final Map<Level, MessageType> loggingLevels = Map.of(
Level.DEBUG, MessageType.Log,
Level.TRACE, MessageType.Log,
Level.DEBUG, MessageType.Log,
Level.ERROR, MessageType.Error,
Level.INFO, MessageType.Info,
Level.WARN, MessageType.Warning
);

/**
* Хранилище возможно подключенного LanguageClient.
*/
@Nullable
@Setter(onMethod_ = {@Autowired})
private LanguageClientHolder clientHolder;

/**
* Конструктор по умолчанию.
* <p>
* Сохраняет сконструированный объект в переменную {@link LanguageClientAwareAppender#INSTANCE}.
*/
public LanguageClientAwareAppender() {
super();
// hacky hack
INSTANCE = this;
}

/**
* Общий метод вывода информации, проверяющий наличие подключенного LanguageClient.
*
* @param event Логируемое событие
* @throws IOException Выбрасывает исключение в случае ошибок записи в стандартные потоки вывода.
*/
@Override
protected void writeOut(ILoggingEvent event) throws IOException {
if (clientHolder != null && clientHolder.isConnected()) {
LanguageClient languageClient = clientHolder.getClient().orElseThrow();
var languageClient = clientHolder.getClient().orElseThrow();

var messageType = loggingLevels.getOrDefault(event.getLevel(), MessageType.Log);
String message = "[%s] [%s] [%s]: %s".formatted(
String message = "[%s - %s] [%s] [%s]: %s".formatted(
event.getLevel(),
event.getInstant(),
event.getThreadName(),
event.getLoggerName(),
event.getFormattedMessage()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,15 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Spring-конфигурация для настройки logback.
*/
@Configuration
public class LanguageClientAwareAppenderConfiguration {
public class LogbackConfiguration {

/**
* @return Настроенный аппендер сообщений в LanguageClient.
*/
@Bean
public LanguageClientAwareAppender languageClientAwareAppender() {
return LanguageClientAwareAppender.INSTANCE;
Expand Down
6 changes: 0 additions & 6 deletions src/main/resources/language-client-aware-appender.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>

<!--
Console appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
<appender name="LANGUAGE_CLIENT_AWARE" class="com.github._1c_syntax.bsl.languageserver.infrastructure.LanguageClientAwareAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
Expand Down

0 comments on commit 3bd07d3

Please sign in to comment.