2012-05-21 7 views
22

Ich habe log4j.properties Datei im Quellordner des Projekts hinzugefügt, aber ich bekomme immer noch eine log4j: Fehler.Fehler: "setFile (null, false) Anruf fehlgeschlagen" bei Verwendung von log4j

Hier ist meine Log4j.properties Datei:

.rootCategory=DEBUG, R, O 
    # Stdout 
    log4j.appender.O=org.apache.log4j.ConsoleAppender 
    log4j.appender.O=log44j.log 
    # File 
    log4j.appender.R=org.apache.log4j.RollingFileAppender 
    log4j.appender.R.File=log4j.log 

    # Control the maximum log file size 
    log4j.appender.R.MaxFileSize=100KB 

    # Archive log files (one backup file here) 
    log4j.appender.R.MaxBackupIndex=1 

    log4j.appender.R.layout=org.apache.log4j.PatternLayout 
    log4j.appender.O.layout=org.apache.log4j.PatternLayout 

    log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n 
    log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n 

    # Define the root logger with appender file 
    logDir = ../logs 
    log4j.rootLogger = DEBUG, FILE 

    # Define the file appender 
    log4j.appender.FILE=org.apache.log4j.FileAppender 
    log4j.appender.FILE.File=logs/${file.name} 
    log4j.appender.FILE.Append=false 

    # Define the layout for file appender 
    log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
    log4j.appender.FILE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 

Hier ist die Java-Ausnahme, die ich erhalte:

log4j:ERROR setFile(null,false) call failed. 
java.io.FileNotFoundException: logs (Access is denied) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:194) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:116) 
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) 
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) 
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) 
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) 
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) 
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:809) 
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735) 
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547) 
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483) 
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127) 
    at org.apache.log4j.Logger.getLogger(Logger.java:104) 
    at lib.Dashboard.Reports.<init>(Reports.java:34) 
    at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:54) 
AmazonDashboardTC_DB17Exception in thread "main" java.lang.NullPointerException 
    at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:131) 

Bitte lassen Sie mich wissen, wie diese Ausnahme zu lösen, wie ich habe versucht, meine Properties-Datei in den Root-Ordner zu legen, und jetzt habe ich im Quellordner platziert, aber in beiden Fällen habe ich die obige Ausnahme.

+0

log4j.appender.FILE.File = logs/$ {} file.name dies nicht im Finale ist Datei, oder? Also, was ist der Wert hier in log4j.properties, die bereitgestellt wurde? – eis

+0

Mögliches Duplikat von http://stackoverflow.com/questions/21140168/log4jerror-setfilenull-false-call-failed –

Antwort

2

java.io.FileNotFoundException: logs (Access is denied)

-> Ihre App kann nicht in den Ordner "logs" schreiben. Nicht mit der log4j-Konfiguration als solcher verbunden. Erstellen Sie den Ordner, wenn dieser nicht vorhanden ist, und erteilen Sie ihm genügend Berechtigungen, damit die Webanwendung darin schreiben kann.

+0

, aber ich habe Protokolle Ordner parallel zum Quellordner meines Projekts erstellt. –

+0

1) Hat die App Schreibrechte für den Ordner? 2) Ist der Ordner an der richtigen Position? Es sollte relativ zu dem sein, von dem die App ausgeführt wird. – eis

+0

ja, alles ist da, und die gleichen log4j.properties Dateien scheint mir bis letzten Freitag gearbeitet. Ich habe Änderungen nur im Pfad von log4j.appender.FILE.File vorgenommen und dann - nachdem es nicht mehr funktioniert. Dann räumte ich meine Bin und legte log4j vom Root zum Quellordner. Log4j benötigt eine Eigenschaftendatei, die in den Klassenpfad geladen werden soll. –

0

Werfen Sie einen Blick auf den Fehler - 'log4j: Fehler setFile (Null, falsch) Anruf fehlgeschlagen. java.io.FileNotFoundException: Protokolle (Zugriff verweigert) '

Es scheint, dass es eine Protokolldatei mit dem Namen' logs 'gibt, auf die der Zugriff verweigert wird, d. H. Nicht über ausreichende Berechtigungen zum Schreiben von Protokollen verfügt. Versuchen Sie, indem Sie Schreibberechtigungen für die Protokolldatei "logs" erteilen. Ich hoffe es hilft.

4

Ich hatte genau das gleiche Problem. Hier ist die Lösung, die für mich gearbeitet: einfach setzen Sie Ihre Eigenschaften Pfad in der cmd Linie Datei auf diese Weise:

-Dlog4j.configuration=<FILE_PATH> (ex: log4j.properties) 

Hope this Sie helfen

+1

Arbeitete wie ein Zauber, 10x! –

22

Ich vermute, dass die Variable ${file.name} nicht korrekt ersetzt wird. Als Ergebnis wird der Wert log4j.appender.FILE.Filelogs/. Daher versucht Java, eine Protokolldatei mit dem Namen logs/ zu erstellen. Wahrscheinlich handelt es sich jedoch um ein vorhandenes Verzeichnis, sodass Sie die Ausnahme erhalten.

Um schnell Abhilfe zu schaffen, ändern Sie die Einstellung log4j.appender.FILE.File so, dass sie auf den absoluten Pfad verweist, z. B. /tmp/mytest.log. Sie sollten keine Ausnahme bekommen.

Danach können Sie mit dem Debuggen fortfahren, warum ${file.name} in Ihrer Laufzeitumgebung nicht korrekt ersetzt wird.

+0

Dies ist definitiv nützlich in Situationen, in denen die Anwendung mehr als eine Protokolldatei hat. –

0

Bitte ändern Sie den Speicherort Ihrer Protokolldatei auf ein anderes Laufwerk. es wird klappen.

Dies ist die Erlaubnis der Erstellung der Protokolldatei.

1

wenn es window7 ist (wie bei mir), ohne Administratorrechte kann eine Datei nicht auf C schreiben: Laufwerk

geben nur einen anderen Ordner in log4j.properties

Set the name of the file

log4j.appender.FILE Datei. Datei = C: \ Server \ Protokoll.aus können Sie mit Notepad ++ sehen

-3

Versuchen Sie Ihren Befehl mit sudo (Super User) ausgeführt wird, das für mich gearbeitet :)
Run: $ sudo your_command
Nachdem als die Super-User-Passwort eingeben. Das ist alles ..

+1

manchmal kann man solche previlage nicht auf einem geteilten System haben –

1

Dieser Fehler kommt, weil der von Ihnen bereitgestellte Appendatei-Speicherort mit dem aktuellen Benutzerzugriff nicht erreichbar ist.

Quick-Lösung, ändern Sie die log4j.appender.FILE.File-zu-Punkt Einstellung absoluten Pfad zur Datei mit der Lage auf die aktuellen Benutzer erreichbar ist, dass Sie sich angemeldet haben, zum Beispiel /tmp/myapp.log. Jetzt sollten Sie keine Fehlermeldung erhalten.

2

i fügen Sie einfach die Schreibberechtigung auf "Protokolle" -Ordner und es funktioniert für mich

add write permission

Verwandte Themen