У меня внешний 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>
Это относится к классу private final static Logger logger = LoggerFactory.getLogger(NameOfTheClass.class);
, а затем, когда я хочу записать что-то в журнал, я использую это в методе: logger.info("Hello world");
В коде у вас вопрос? Вы вызываете [LOG], но где вы инициализируете этот [LOG]? Не видите init во внутреннем / внешнем классе в ваших примерах классов?
Обновил свой вопрос. Во внутреннем классе есть int a
и int b
, которые я хочу записать в журнал.
Хорошо, но в настоящее время нет строки, которая их регистрирует? Кроме того, вы инициализируете logger
, но вызываете LOG
?
log
- это другая функция, которая изначально была в приложении. Пытаюсь реализовать логгер. И это работает, но только во внешнем классе. Когда я добавляю его во внутренний класс и пытаюсь сохранить, например, int a
с помощью logger.info(a)
, он не работает. Он даже не создает пустой файл .log, как он создается, когда я вызываю эту функцию из внешнего класса.
Во-первых, вы должны обновить код в своем вопросе именно так, как вы пробовали. Во-вторых, мне непонятно, что вы имеете в виду под «реализацией регистратора». Вы пробуете логиниться в отдельные файлы?
Хорошо, я обновил именно то, что пытался.
Где вы ищете журналы? Если вы используете Android, вы должны использовать встроенный Logcat, а не Logback.
Но это работает. К сожалению, только когда он находится во внешнем классе (создает файл .log в каталоге, указанном в logback.xml). Когда это похоже на код, который я опубликовал, он не создает файл .log (я не получаю ошибок, например, кнопка, которую я нажимаю, была пустой)
Если вы хотите добавить уровень журнала для внутренних классов, вам необходимо добавить приведенную ниже конфигурацию в файл logback.xml. у меня это сработало.
Поскольку это внутренний класс, вам необходимо отделить его от родительского класса с помощью знака $.
<logger name = "packagename.ClassifierModule$ClassifierRunnable " level = "INFO" additivity = "false">
<appender-ref ref = "file" />
</logger>
Надеюсь, это поможет вам с настройкой. Благодарность
Можете ли вы добавить в свой код, как вы на самом деле инициализируете эти регистраторы?