Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение ConsoleAppender / 8 сообщений из 8, страница 1 из 1
11.08.2021, 14:29
    #40090071
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
Можно ли сохранить ConsoleAppender в файл

Набросал тут небольшой пример

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
@Slf4j
@Service
public class LoggerDownloadService {

    public void printAppenders() throws IOException {
        LoggerContext context = (LoggerContext) StaticLoggerBinder.getSingleton()
                .getLoggerFactory();
        for (Logger logger : context.getLoggerList()) {
            for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext(); ) {
                Appender<ILoggingEvent> appender = index.next();
                log.info("Appender NAME: {}", appender.getName());

                ConsoleAppender<ILoggingEvent> consoleAppender = (ConsoleAppender) appender;
                ConsoleTarget consoleTarget = ConsoleTarget.findByName(consoleAppender.getTarget());
                try (FileOutputStream fos = new FileOutputStream("test.log")) {
                    ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) consoleTarget.getStream();
                    byteArrayOutputStream.writeTo(fos);
                }
            }
        }

        log.info("FINISH!!!");
    }


}



но почему-то валится на кастовании

Код: java
1.
2.
3.
ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) consoleTarget.getStream();

java.lang.ClassCastException: ch.qos.logback.core.joran.spi.ConsoleTarget$1 cannot be cast to java.io.ByteArrayOutputStream



Я ожидаю OutputStream а возвращается ConsoleTarget
...
Рейтинг: 0 / 0
11.08.2021, 15:18
    #40090085
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
можете внятно объяснить, что хотите сделать? что значит сохранить ConsoleAppender? все, что логируется в консоль, сохранить параллельно в файл?

-=Koba=-
но почему-то валится на кастовании

consoleTarget.getStream() возвращает OutputStream - это базовый абстрактный класс с кучей имплементаций, на основании чего вы решили, что его можно привести к типу ByteArrayOutputStream?
...
Рейтинг: 0 / 0
11.08.2021, 15:35
    #40090092
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
chpasha
можете внятно объяснить, что хотите сделать? что значит сохранить ConsoleAppender? все, что логируется в консоль, сохранить параллельно в файл?

-=Koba=-
но почему-то валится на кастовании

consoleTarget.getStream() возвращает OutputStream - это базовый абстрактный класс с кучей имплементаций, на основании чего вы решили, что его можно привести к типу ByteArrayOutputStream?

Да именно, что в логируется в консоль сохранить в файл
Именно используя ConsoleAppender, а не настройки logback или Spring

consoleTarget.getStream() возвращает OutputStream - это базовый абстрактный класс с кучей имплементаций, на основании чего вы решили, что его можно привести к типу ByteArrayOutputStream?

Да тут вы правы
...
Рейтинг: 0 / 0
11.08.2021, 15:46
    #40090102
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
-=Koba=-
Да именно, что в логируется в консоль сохранить в файл
Именно используя ConsoleAppender, а не настройки logback или Spring

откуда такое идиотское требование? добавляем FileAppender в конфиге, где объявлен ConsoleAppender и получаем все, что требуется.
...
Рейтинг: 0 / 0
11.08.2021, 15:48
    #40090103
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
Прикольное желание ТС))
...
Рейтинг: 0 / 0
11.08.2021, 15:53
    #40090106
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
PetroNotC Sharp
Прикольное желание ТС

ага, секс на лыжах в гамаке
...
Рейтинг: 0 / 0
11.08.2021, 16:47
    #40090121
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
Если приложение использует ConsoleAppender
Можно ли как-то скачать логи?

Тот же ранчер и Kubernetes

kubectl logs -n <Namespace> -f <имя контейнера>

Получают же логи
...
Рейтинг: 0 / 0
11.08.2021, 17:02
    #40090127
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение ConsoleAppender
-=Koba=-
Получают же логи

ну так они же контролируют сам вывод в консоль и могут с ним делать, что хотят. если вам изначально нужны файлы, так и логируйте в файлы. ну либо запускайте приложение так, чтоб его вывод в консоль перенаправлялся в файл, как в linux, что-то типа
Код: java
1.
cmd >>file.txt 2>&1



а то, что делаете вы - это какой-то бред. ConsoleAppender получает строку на входе, пишет ее в System.out или System.err и забывает навсегда. что вы надеетесь из OutputStream вытащить? это кран, а не ведро - через него инфа проходит, но не накапливается. Вот если написать свой ConsoleAppender - можно ее вовремя перехватывать и направлять куда надо - но это тоже изврат в данном конкретном случае.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение ConsoleAppender / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]