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.
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.
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
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.
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
Bitte ändern Sie den Speicherort der Protokolldatei auf ein anderes Laufwerk. es wird klappen.
dies ist die Erlaubnis, eine Protokolldatei zu erstellen.
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
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/...
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.