wake-up-neo.com

Fehler: "SetFile-Aufruf (null, false) ist fehlgeschlagen" bei Verwendung von log4j

Ich habe log4j.properties-Datei im Quellordner des Projekts hinzugefügt, aber ich bekomme immer noch einen log4j: Fehler.

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 bekomme:

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 behoben werden kann, da ich versucht habe, meine Eigenschaftendatei im Hauptordner abzulegen und jetzt im Quellordner abgelegt habe. In beiden Fällen habe ich jedoch die obige Ausnahme.

24
Shashank Jain

Ich vermute, dass die Variable ${file.name} nicht korrekt ersetzt wird. Infolgedessen wird der Wert von log4j.appender.FILE.File zu logs/. Java versucht daher, eine Protokolldatei mit dem Namen logs/ zu erstellen. Wahrscheinlich handelt es sich jedoch um ein vorhandenes Verzeichnis. Daher wird die Ausnahme angezeigt.

Ändern Sie zur schnellen Abhilfe die Einstellung log4j.appender.FILE.File so, dass sie über den absoluten Pfad auf die Datei verweist, beispielsweise /tmp/mytest.log. Sie sollten keine Ausnahme erhalten.

Danach können Sie mit dem Debugging fortfahren, warum ${file.name} in Ihrer Laufzeitumgebung nicht ordnungsgemäß ersetzt wird.

24
janos

Ich hatte genau das gleiche Problem. Hier ist die Lösung, die für mich funktioniert hat: Geben Sie einfach den Pfad Ihrer Eigenschaftendatei in die Zeile cmd ein:

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

Hoffe, das wird dir helfen

5
Firas

Java.io.FileNotFoundException: Protokolle (Zugriff wird verweigert)

-> Ihre App kann nicht in den Protokollordner schreiben. Nicht auf die log4j-Konfiguration als solche bezogen. Erstellen Sie den Ordner, wenn er nicht vorhanden ist, und geben Sie ihm die erforderlichen Berechtigungen, damit die Webanwendung darin schreiben kann.

2
eis

ich füge einfach eine Schreibberechtigung für den "Logs" -Ordner hinzu und es funktioniert für mich

 add write permission

2
Hatem Badawi

dieser Fehler tritt auf, weil der von Ihnen angegebene Appender-Dateispeicherort nicht mit dem aktuellen Benutzerzugriff erreichbar ist.

Quick Solution, ändern Sie die Einstellung von log4j.appender.FILE.File so, dass sie auf den absoluten Pfad zeigt, dessen Pfad für den aktuell angemeldeten Benutzer erreichbar ist, beispielsweise /tmp/myapp.log). Sie sollten jetzt keine Fehlermeldung erhalten.

wenn es sich um window7 (wie meines) handelt, kann ohne Administratorrechte keine Datei auf Laufwerk C: geschrieben werden

geben Sie einfach einen anderen Ordner in der Datei log4j.properties an

Legen Sie den Namen der Datei fest

log4j.appender.FILE.File = C:\server\log.out können Sie mit notepad ++ sehen

1
vimal krishna

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

dies ist die Erlaubnis, eine Protokolldatei zu erstellen.

0
user3221176

Das ist deine Konfiguration:

log4j.appender.FILE.File=logs/${file.name}

Und dieser Fehler ist passiert:

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

Es scheint also, dass die Variable file.name nicht gesetzt ist und Java versucht, in das Verzeichnis logs zu schreiben.


Sie können erzwingen den Wert Ihrer Variablen ${file.name} mit dieser Option -D :

mvn clean test -Dfile.name=logfile.log
0
DependencyHell

Um dies zu verhindern, habe ich alle Werte in der Datei log4j.properties mit dem Verzeichnis $ {kafka.logs.dir} in mein eigenes Verzeichnis geändert. Zum Beispiel D:/temp/...

0
Armer B.

Schauen Sie sich den Fehler -.__ an. 'Log4j: ERROR setFile (null, false) Aufruf fehlgeschlagen . Java.io.FileNotFoundException: logs (Zugriff wird verweigert)

Es scheint, als gäbe es eine Protokolldatei mit dem Namen "logs", auf die der Zugriff verweigert wird, d. H. Sie verfügt nicht über ausreichende Berechtigungen zum Schreiben von Protokollen. Versuchen Sie, indem Sie der Protokolldatei "logs" Schreibberechtigungen erteilen. Ich hoffe es hilft.

0
priti