web-dev-qa-db-fra.com

Erreur: "L'appel de setFile (null, false) a échoué" lors de l'utilisation de log4j

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.

24
Shashank Jain

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.

24
janos

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

5
Firas

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.

2
eis

je viens d'ajouter l'autorisation d'écriture dans le dossier "journaux" et cela fonctionne pour moi

 add write permission

2
Hatem Badawi

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.

2

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 ++

1
vimal krishna

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.

0
user3221176

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
0
DependencyHell

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/...

0
Armer B.

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.

0
priti