Регистратор логбэка во внутреннем классе

У меня внешний public class ClassifierModule и внутренний public class ClassifierRunnable. Регистратор, реализованный во внешнем классе, работает нормально. Но когда я пытаюсь реализовать это во внутреннем классе, это вообще не работает. Я имею в виду, что ошибки нет, но логбэк не ведёт.

Как реализовать логгер во внутреннем классе? (До сих пор я узнал, что это должно быть нестастично).

private final static Logger logger = LoggerFactory.getLogger(ClassifierModule.class);

Вот мой код:

//outer class
public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {

    public ClassifierModule(ReactApplicationContext reactContext) {
        super(reactContext);
        appState = ((MainApplication)reactContext.getApplicationContext());
        }     

    @Override
    public String getName() {
      return "Classifier";
    }

    @ReactMethod
    public void saveLog() {
       logger.info("Hello world");
    }

    //inner class        
    public class ClassifierRunnable implements Runnable {

        public ClassifierRunnable(double[][] buffer) {
            rawBuffer = buffer;
            PSD = new double[NUM_CHANNELS][nbBins];
        }

        private final Logger logger = LoggerFactory.getLogger(ClassifierRunnable.class);

        @Override
        public void run() {
            if (isLogging) {

                int a = 11;
                int b = 24;

                logger.info(a)

            }
    }
}

Мой logback.xml настроен следующим образом:

<configuration>
  <!-- Create a file appender for a log in the application's data directory -->
  <appender name = "file" class = "ch.qos.logback.core.FileAppender">
    <file>/data/data/com.eeg_project/files/log/eegdata.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- Write INFO (and higher-level) messages to the log file -->
  <root level = "INFO">
    <appender-ref ref = "file" />
  </root>
</configuration>

Можете ли вы добавить в свой код, как вы на самом деле инициализируете эти регистраторы?

pirho 09.09.2018 21:08

Это относится к классу private final static Logger logger = LoggerFactory.getLogger(NameOfTheClass.class);, а затем, когда я хочу записать что-то в журнал, я использую это в методе: logger.info("Hello world");

Greynairod 09.09.2018 21:25

В коде у вас вопрос? Вы вызываете [LOG], но где вы инициализируете этот [LOG]? Не видите init во внутреннем / внешнем классе в ваших примерах классов?

pirho 09.09.2018 21:28

Обновил свой вопрос. Во внутреннем классе есть int a и int b, которые я хочу записать в журнал.

Greynairod 09.09.2018 21:34

Хорошо, но в настоящее время нет строки, которая их регистрирует? Кроме того, вы инициализируете logger, но вызываете LOG?

pirho 09.09.2018 21:41
log - это другая функция, которая изначально была в приложении. Пытаюсь реализовать логгер. И это работает, но только во внешнем классе. Когда я добавляю его во внутренний класс и пытаюсь сохранить, например, int a с помощью logger.info(a), он не работает. Он даже не создает пустой файл .log, как он создается, когда я вызываю эту функцию из внешнего класса.
Greynairod 09.09.2018 23:36

Во-первых, вы должны обновить код в своем вопросе именно так, как вы пробовали. Во-вторых, мне непонятно, что вы имеете в виду под «реализацией регистратора». Вы пробуете логиниться в отдельные файлы?

pirho 09.09.2018 23:44

Хорошо, я обновил именно то, что пытался.

Greynairod 10.09.2018 00:29

Где вы ищете журналы? Если вы используете Android, вы должны использовать встроенный Logcat, а не Logback.

OneCricketeer 10.09.2018 14:46

Но это работает. К сожалению, только когда он находится во внешнем классе (создает файл .log в каталоге, указанном в logback.xml). Когда это похоже на код, который я опубликовал, он не создает файл .log (я не получаю ошибок, например, кнопка, которую я нажимаю, была пустой)

Greynairod 10.09.2018 15:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
10
1 139
1

Ответы 1

Если вы хотите добавить уровень журнала для внутренних классов, вам необходимо добавить приведенную ниже конфигурацию в файл logback.xml. у меня это сработало.

Поскольку это внутренний класс, вам необходимо отделить его от родительского класса с помощью знака $.

<logger name = "packagename.ClassifierModule$ClassifierRunnable " level = "INFO" additivity = "false">
    <appender-ref ref = "file" />
</logger>

Надеюсь, это поможет вам с настройкой. Благодарность

Другие вопросы по теме