2013-03-25 14 views
9

Mam problem z aplikacją, która ulega awarii po jej wdrożeniu na innych komputerach z oprogramowaniem JRE 1.7. Kiedy uruchamiam to wewnątrz NetBeans (lub nawet bezpośrednio z pliku JAR) na moim komputerze, wszystko jest w porządku. Ale na innym komputerze nie powiedzie się podczas określonych zdarzeń (kliknięć przycisku) podczas wykonywania.Log4j - Nie można znaleźć pliku dziennika

Tak, dowiedziałem się o rejestrowaniu przy użyciu biblioteki log4j. Dało mi to trochę informacji na temat problemu w mojej aplikacji, a rejestracja działa doskonale, znowu na MOIM komputerze. Ale gdy wdrażam plik JAR na inne komputery, na których działa JRE (Java 7 Update 17), nie znajduję żadnych śladów żadnych plików dziennika.

Oto mój plik log4j.properties:

# Root logger option 
log4j.rootLogger=INFO, file, stdout 

# Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:\logging.log 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} 
%-5p %c{1}:%L - %m%n 

# Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} 
%-5p %c{1}:%L - %m%n 

Na moim komputerze, widzę plik logging.log prawo wewnątrz folderu projektu. W tym zakresie wszystko działa idealnie. Jednak na komputerze użytkownika w ogóle nie ma oznak tego pliku. Nie w C: \ (gdzie tak myślałem), nie w C: \ Program Files (x86) \ ani nigdzie indziej. Zrobiłem pełne przeszukiwanie mojego dysku twardego, ale nic nie wróci.

Gdzie powinien być przechowywany ten plik? Czy moje właściwości są ustawione prawidłowo? Bardzo zdezorientowany ...

Dziękujemy!

+3

Czy użytkownik na maszynie docelowej może tworzyć pliki w katalogu głównym na dysku c? – DwB

+2

Najpierw należy podwoić ukośniki w plikach właściwości: 'C: \\ logging.log'. Lub użyj ukośników, ponieważ okna zaakceptują je: 'C:/logging.log' – Kenster

+0

DwB - tak, mają pełne uprawnienia do c: \. Nie wierzę, że jest to problem uprawnień. – Alex

Odpowiedz

6

Jeśli ktoś natknie się na to stanowisko, chciałem udokumentować, jak go rozwiązałem.

Przede wszystkim, jak słusznie zauważył DwB, problem polegał na tym, że konto użytkownika nie miało wystarczających uprawnień do utworzenia pliku logging.log. W moim kodzie miałem blok catch, który był wykonywany i zawierał kod, aby opuścić system w przypadku błędu zapisu pliku. Ponieważ to było dokładnie to, co starałem się napisać o szczegółach logowania, nie byłem w stanie uzyskać żadnego wyniku, który dałby mi do zrozumienia, że ​​jest źródłem mojego problemu.

Kiedy zdałem sobie z tego sprawę, musiałem zmienić miejsce, w którym zapisywałem plik dziennika. Zamiast zapisywać go w katalogu głównym (C: \) lub w folderze, w którym znajdował się plik jar (C: \ Program Files \), w obu przypadkach nie mogłem zagwarantować, że użytkownik będzie miał pełne uprawnienia, postanowiłem aby utworzyć folder w ich ścieżce AppData.

Pierwszy wiersz w moim programie jest wywołanie tej funkcji (za pomocą nazwą rodzajową myprogram):

private static void makeAppDataFolder() { 
    File dir = new File(System.getenv("APPDATA") + "\\MyProgram"); 
    if (!dir.exists()) {dir.mkdir();} 
} 

Tworzy folder o nazwie MojProgram na koncie użytkownika w \ AppData \ Roaming. Ponieważ ta ścieżka jest częścią ścieżki konta użytkownika, uważam, że użytkownik zawsze będzie mógł do niej pisać, rozwiązując w ten sposób problem z uprawnieniami. Jeśli ktokolwiek wie, proszę daj mi znać.

Następnie, w moim pliku log4j.properties, zmienić linię

log4j.appender.file.File=logging.log 

do

log4j.appender.file.File=${user.home}/Application Data/MyProgram/logging.log 

ten kieruje pliku do folderu, który właśnie stworzył.

Kiedy to zrobiłem i dodałem kilka dobrze umieszczonych komunikatów logowania, udało mi się znaleźć inne moje problemy, a teraz wszystko działa dobrze.

Mam nadzieję, że to pomoże komuś. Jeśli ktoś ma jakieś sugestie, opublikuj.

Powiązane problemy