J'ai ajouté le fichier log4j.properties
dans le dossier source du projet mais j'obtiens toujours une erreur log4j:.
Voici mon fichier Log4j.properties:
.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
Voici l'exception Java que je reçois:
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)
Faites-moi savoir, comment résoudre cette exception, car j'ai essayé de placer mon fichier de propriétés dans le dossier racine et maintenant je l'ai placé dans le dossier source, mais dans les deux cas, j'ai l'exception ci-dessus.
Je soupçonne que la variable ${file.name}
n'est pas substituée correctement. Par conséquent, la valeur de log4j.appender.FILE.File
devient logs/
. En tant que tel, Java essaie de créer un fichier journal nommé logs/
, mais il s’agit probablement d’un répertoire existant. Vous obtenez donc l’exception.
En guise de solution rapide, modifiez le paramètre log4j.appender.FILE.File
pour qu'il pointe sur le fichier par chemin absolu, par exemple /tmp/mytest.log
. Vous ne devriez pas avoir une exception.
Après cela, vous pouvez procéder au débogage pour savoir pourquoi ${file.name}
n'est pas remplacé correctement dans votre environnement d'exécution.
J'ai eu exactement le même problème. Voici la solution qui a fonctionné pour moi: indiquez simplement le chemin du fichier de propriétés dans la ligne de commande:
-Dlog4j.configuration=<FILE_PATH> (ex: log4j.properties)
J'espère que ceci vous aidera
Java.io.FileNotFoundException: logs (accès refusé)
-> votre application ne peut pas écrire dans le dossier "logs". Pas lié à la configuration de log4j en tant que telle. Créez le dossier s'il n'existe pas et accordez-lui suffisamment d'autorisations pour que l'application Web puisse y écrire.
cette erreur survient car l'emplacement du fichier appender que vous avez fourni n'est pas accessible avec l'accès utilisateur actuel.
Solution rapide , modifiez le paramètre log4j.appender.FILE.File pour qu'il pointe vers un fichier en utilisant le chemin absolu, lequel emplacement est accessible à l'utilisateur actuel que vous avez connecté, par exemple /tmp/myapp.log . Maintenant, vous ne devriez pas avoir d'erreur.
s'il s'agit de window7 (comme le mien), sans droits administratifs, impossible d'écrire un fichier sur le lecteur C:
il suffit de donner un autre dossier dans le fichier log4j.properties
Définir le nom du fichier
log4j.appender.FILE.File = C:\server\log.out vous pouvez voir avec notepad ++
Veuillez modifier l'emplacement de votre fichier journal sur un autre lecteur. ça va marcher.
c'est la permission de créer un fichier journal.
Ceci est votre config:
log4j.appender.FILE.File=logs/${file.name}
Et cette erreur s'est produite:
Java.io.FileNotFoundException: logs (Access is denied)
Il semble donc que la variable file.name
n'est pas définie et Java tente d'écrire dans le répertoire logs
.
Vous pouvez forcer la valeur de votre variable ${file.name}
appelant maven avec cette option -D :
mvn clean test -Dfile.name=logfile.log
Pour éviter cela, j'ai changé toutes les valeurs du fichier log4j.properties du répertoire $ {kafka.logs.dir} en mon propre répertoire. Par exemple D:/temp/...
Examinez l'erreur - 'Log4j: ERREUR: l'appel de setFile (null, false) a échoué . Java.io.FileNotFoundException: logs (l'accès est refusé)'
Il semble qu'il existe un fichier journal nommé "journaux" auquel l'accès est refusé car il ne dispose pas des autorisations suffisantes pour écrire des journaux. Essayez en donnant des autorisations d'écriture au fichier journal 'logs'. J'espère que ça aide.