Nano Hash - криптовалюты, майнинг, программирование

Создание пользовательского макета в Logback

Я пытаюсь создать собственный макет в журнале, как показано в примере в главе 6 в руководство:

package com.dces.util;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.LayoutBase;

public class LoggingConsoleLayout extends LayoutBase<ILoggingEvent>{

@Override
public String doLayout(ILoggingEvent event) {
    StringBuffer sbuf = new StringBuffer(128);
    sbuf.append("-- ");
    sbuf.append("[");
    sbuf.append(event.getLevel());
    sbuf.append("]");
    sbuf.append(event.getLoggerName());
    sbuf.append(" - ");
    sbuf.append(event.getFormattedMessage().replaceAll("\n", "\n\t"));
    sbuf.append(CoreConstants.LINE_SEPARATOR);
    return sbuf.toString();
}

Затем я настроил файл XML следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <!-- <pattern> %-5level [%logger{0}] - %msg%n </pattern> -->
         <layout class="com.dces.util.LoggingConsoleLayout" />
    </encoder>
</appender>

<root level="trace">
    <appender-ref ref="STDOUT" />
</root>
</configuration>

Однако я получаю следующую ошибку, когда пытаюсь создать регистратор следующим образом:

public class Main {
     private static Logger logger = (Logger)LoggerFactory.getLogger(Main.class);
     public static void main(String [] args)
     {
         logger.info("Testing");
     }
}

Вот сообщение об ошибке, которое я получаю:

05:40:11,519 |-ERROR in ch.qos.logback.core.joran.util.PropertySetter@3462fc6c - Could not invoke method setLayout in class ch.qos.logback.classic.encoder.PatternLayoutEncoder with parameter of type com.dces.util.LoggingConsoleLayout java.lang.reflect.InvocationTargetException
at java.lang.reflect.InvocationTargetException
at  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at  at java.lang.reflect.Method.invoke(Unknown Source)
at  at ch.qos.logback.core.joran.util.PropertySetter.invokeMethodWithSingleParameterOnThisObject(PropertySetter.java:293)
at  at ch.qos.logback.core.joran.util.PropertySetter.setComplexProperty(PropertySetter.java:356)
at  at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:179)
at  at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:318)
at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:197)
at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:183)
at  at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:106)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56)
at  at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at  at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148)
at  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at  at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
at  at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
at  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
at  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
at  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
at  at com.dces.Main.<clinit>(Main.java:8)
Caused by: java.lang.UnsupportedOperationException: one cannot set the layout of ch.qos.logback.classic.encoder.PatternLayoutEncoder
at  at ch.qos.logback.core.pattern.PatternLayoutEncoderBase.setLayout(PatternLayoutEncoderBase.java:64)
at  ... 25 common frames omitted
05:40:11,538 |-ERROR in ch.qos.logback.classic.PatternLayout("null") - Empty or null pattern.
05.01.2013

Ответы:


1

Кодировщик по умолчанию — PatternLayoutEncoder, который является подклассом PatternLayoutEncoderBase. PatternLayoutEncoderBase поддерживает только настройку шаблона журнала, такого как:

<encoder>
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>

Вместо этого вы можете использовать LayoutWrappingEncoder

  <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.dces.util.LoggingConsoleLayout" />
  </encoder>
05.01.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..