Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

doriangrey

Plik .csv na podstawie danych w czasie rzeczywistym

Rekomendowane odpowiedzi

Aplikacja nie jest moja i chcę ją jedynie zmodyfikować, więc nie mogę za bardzo mieszać i muszę niestety działać z designem takim jaki jest. Próbowałem przenieśc klasę wewnętrzną do zewnętrznej i tym samym pozbyć się problemu, ale różnią się one konstruktorem i kod się nie kompilował. Ogólnie chcę zaimplementować loggera w wawnętrznej klasie ClassifierRunnable i mój kod w skrócie (całość wrzucam w linku poniżej) wygląda tak:

 

//klasa zewnętrzna
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() {
      isLogging = true;
   }

   //klasa wewnętrzna        
   public class ClassifierRunnable implements Runnable {

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

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

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

               int a = 11;
               int b = 24;

               String csvLine = a + "," + b;

               logger.info(csvLine)

           }
   }
}

 

Link do całości: CAŁY KOD

 

logback.xml wygląda tak:

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <layout class="ch.qos.logback.classic.PatternLayout">
           <Pattern>
               %d{dd-MM-yyyy HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
           </Pattern>
       </layout>
   </appender>
   <appender name="FILE-APPENDER" class="ch.qos.logback.core.FileAppender">
       <file>/data/data/com.eeg_project/files/log/data.log</file>
       <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
           <Pattern>
               %msg%n
           </Pattern>
       </encoder>
   </appender>
   <logger name="com.eeg_project.components.classifier.ClassifierModule.ClassifierRunnable" level="INFO" additivity="false">
       <appender-ref ref="FILE-APPENDER" />
   </logger>
   <root level="INFO">
       <appender-ref ref="STDOUT" />
   </root>
</configuration>

 

I niestety jak logger jest w wewnętrznej klasie to mimo, że aplikacja nie sypie błędami, nie powstaje ani plik .log ani tym bardziej nie pojawiają się w nim wartości. Ten sam kod w klasie zewnętrznej działa jak powinien.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak wywalisz całą klasę wewnętrzną do osobnego pliku i poprawisz importy, na pewno będzie działać. Jak chcesz zostawić tak, jak jest (co w tym przypadku ma w sumie jakiś sens), to pozostaje inicjalizować loggera, podając gotowy String:

 

logger = LoggerFactory.getLogger("com.eeg_project.components.classifier.ClassifierModule.ClassifierRunnable");

Nigdy nie próbowałem, ale powinno działać. Niestety trzeba pamiętać o zmianie tego Stringa w przypadku zmiany nazwy klasy. Kiedyś mają ten problem rozwiązać.

 

W logback.xml lepiej podawać cały pakiet dla loggera zamiast klasy:

 

<logger name="com.eeg_project.components.classifier" level="INFO" additivity="false">

Logger powinien być statyczny:

 

private static final Logger logger = LoggerFactory.getLogger(...)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Niestety to również nie działa ;( wyciągnąłem też klasę zewnętrzna do innego pliku i mimo, że apka się skompilowała to logback nie wstał.

 

Próbowałem uruchomić logbacka z innych plików, które są w aplikacji. Metodą prób i błędów zauważyłem, że działa TYLKO wtedy gdy jest w klasie, którą bezpośrednio wykorzystuje potem sam React Native (klasy które zawierają "extends ReactContextBaseJavaModule").

 

Zostaje zatem chyba tylko wysłanie tych intów za pomocą jakiegoś eventu do klasy zewnętrznej. Szukam właśnie jak to zrobić, ale z tego co widzę to java albo nie ma tego jakoś super rozwiniętego, albo po prostu zbyt wielki ze mnie debil, żeby to zrozumieć ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...