2009-08-06 3 views
5

Mam starszą aplikację PSVM, którą chciałbym przekierować jej wyniki rejestrowania do unikalnych plików na wykonanie. Tak więc, jeśli wywołam go o godzinie 10:00, przekieruj jego wynik do {id-id} -10: 00.log; a inny wątek wykonania może rozpocząć wykonywanie o godzinie 10:01, a jego wynik trafi do {wątek-id} -10: 01.log. Rozumiem, że to nie jest eleganckie.dynamiczne tworzenie i niszczenie rejestratorów logów

Moje pytania są następujące:

  • jest to możliwe?
  • Czy ktoś ma pomysł, jak się do niego zbliżyć?
  • Czy można zwolnić/zniszczyć appendera, kiedy nie jest już potrzebny?

Dzięki!

Odpowiedz

4

Zacznę od FileAppender i zacznę od tego, aby utworzyć własną. Po prostu zmodyfikuj swoją wersję, aby uzyskać aktualny identyfikator wątku i dołączyć do pliku odpowiedni identyfikator wątku/znacznika czasu przed utworzeniem. Zachowałbyś (powiedzmy) mapę (buforowaną) FileWriters wpisaną na id wątku.

Pisanie aplikacji jest dość banalne - here's a Javaworld guide, jak to zrobić.

Czy powyższy program najprawdopodobniej uruchomi się dwa razy w ciągu jednej minuty? Czy chcesz dodać identyfikator procesu lub podobny, aby zachować wyjątkowość?

+0

dzięki za szybką odpowiedź! nie jest tak, że jeden wątek robi to więcej niż raz. Ale w każdym razie jest to tylko przykład do dyskusji. nazwa będzie mieć zasięg wyjątkowy. Jakieś pomysły na temat wydania pliku piszącego? –

+0

+1 Dobry przewodnik link – WolfmanDragon

+0

Re. zwalnianie. Myślę, że powinieneś opróżnić program piszący po każdym logowaniu (aby zapewnić zapis na dysku) i nie martw się o jego zwolnienie. Pozwól JVM zabrać wszystko. O ile nie piszesz wielu wątków i masz dużo otwartych plików. Wtedy możesz po prostu chcieć, aby pisarze "n" byli jednocześnie otwierani i zamykani, gdy nie są zalogowani. Może się to jednak skończyć :-) –

1

Nie jest to możliwe, przynajmniej nie jest łatwe do zrobienia w log4j. Jeśli jednak przyjrzymy się przesyłce SiftingAppender z logbackem (następcą log4j), zostanie ona zaprojektowana tak, aby obsłużyć tworzenie elementów nadawcy przy kryteriach środowiska wykonawczego, a także ich usuwanie, gdy nie są już potrzebne.

Jeśli aplikacja wymaga utworzenia tylko jednego pliku dziennika podczas uruchamiania aplikacji, wystarczy nazwać plik dziennika na podstawie znacznika czasu. Krzycz na liście mailingowej użytkownika, jeśli potrzebujesz dodatkowej pomocy.

+0

Jestem ciekaw, jak uzyskać więcej informacji o tym, dlaczego nie jest to możliwe. Wydaje się to stosunkowo proste. Później wysłałem wiadomość do użytkownika, który loguje. Mam nadzieję, że znajdziesz to i opracujesz. Dzięki! –

+0

Zależy od tego, czy chcesz skonfigurować programista niestandardowy programowo, czy poprzez plik konfiguracyjny. Istnieje również kwestia zarządzania plikami dziennika (po jednym na wątek) w wielowątkowej aplikacji. Pierwotne pytanie nie było bardzo szczegółowe w odniesieniu do tych dwóch kwestii. – Ceki