web-dev-qa-db-fra.com

Où devrais-je placer le fichier log4j.properties?

J'ai écrit un projet de service Web utilisant netbeans 6.7.1 avec glassfish v2.1, mettez log4j.properties dans le répertoire racine du projet et utilisez:

static Logger logger = Logger.getLogger(MyClass.class);

en constructeur:

PropertyConfigurator.configure("log4j.properties");

et dans les fonctions:

logger.info("...");
logger.error("...");
// ...

mais, c’est une information d’erreur (en fait, j’ai essayé de la mettre presque à chaque fois que je pouvais me rendre compte):

log4j:ERROR Could not read configuration file [log4j.properties].
Java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at Java.io.FileInputStream.open(Native Method)
        at Java.io.FileInputStream.<init>(FileInputStream.Java:106)
        at Java.io.FileInputStream.<init>(FileInputStream.Java:66)
        at org.Apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.Java:297)
        at org.Apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.Java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.Java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

l'exemple de projet peut être obtenu à partir de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8

123
mono

Je sais qu'il est un peu tard pour répondre à cette question, et peut-être avez-vous déjà trouvé la solution, mais je publie la solution que j'ai trouvée (après avoir beaucoup cherché sur Google) afin que cela puisse aider un peu:

  1. Placez log4j.properties sous WEB-INF\classes du projet, comme indiqué précédemment dans ce fil de discussion.
  2. Mettez log4j-xx.jar sous WEB-INF\lib
  3. Testez si log4j a été chargé: ajoutez -Dlog4j.debug @ à la fin de vos options Java de Tomcat

J'espère que cela aidera.

rgds

108
miss

Comme déjà indiqué, log4j.properties devrait être dans un répertoire inclus dans le classpath, je veux ajouter que dans un projet mavenized un bon endroit peut être src/main/resources/log4j.properties

39
stivlo

Vous pouvez spécifier l'emplacement du fichier de configuration avec l'argument VM -Dlog4j.configuration = "fichier:/C: /workspace3/local/log4j.properties"

26
Makatun

Vous devez le placer dans le répertoire racine, qui correspond à votre contexte d'exécution.

Exemple:

    MyProject
       src
           MyClass.Java
           log4j.properties

Si vous commencez à exécuter à partir d'un autre projet, vous devez utiliser ce fichier dans le projet pour lancer l'exécution. Par exemple, si un projet différent contient des tests JUnit, il doit également avoir son fichier log4j.properties.


Je suggère d'utiliser log4j.xml au lieu du log4j.properties. Vous avez plus d'options, obtenez l'aide de votre IDE et ainsi de suite ...

25
KLE

Pour un projet basé sur Maven, conservez votre fichier log4j.properties dans src/main/resources. Rien d'autre a faire!

16
Byorn

Si vous mettez log4j.properties dans src, vous n’avez pas besoin d’utiliser la déclaration - 

PropertyConfigurator.configure("log4j.properties");

Il sera pris automatiquement car le fichier de propriétés est dans le classpath.

13
Ani

Essayer:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
10
Jhon M

Le fichier doit être situé dans le répertoire WEB-INF/classes . Cette structure de répertoires doit être intégrée au fichier war. 

9
Martin OConnor

Mon IDE est NetBeans. Je mets le fichier log4j.property comme indiqué sur les images

Root

project's root folder

Web

web folder

WEB-INF

WEB-INF folder

Pour utiliser ce fichier de propriétés, vous devriez écrire ce code:

package example;

import Java.io.File;
import org.Apache.log4j.PropertyConfigurator;
import org.Apache.log4j.Logger;
import javax.servlet.*;
public class test {

public static ServletContext context;
static Logger log = Logger.getLogger("example/test");

public test() {

        String homeDir = context.getRealPath("/");
        File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
        log.info("This is a test");
    }
}

Vous pouvez définir contexte statique ServletContext depuis un autre fichier JSP . Exemple:

test.context = getServletContext(); 
test sample = new test(); 

Vous pouvez maintenant utiliser le fichier log4j.property dans vos projets.

7
Ali Mamedov

Quelques réponses spécifiques techniquement correctes ont déjà été fournies, mais en général, cela peut se situer n'importe où dans le classpath d’exécution, c’est-à-dire partout où les classes sont recherchées par la JVM.

Il peut s'agir du répertoire/src dans Eclipse ou du répertoire WEB-INF/classes dans votre application déployée, mais il est préférable de connaître le concept de chemin de classe et de comprendre pourquoi le fichier y est placé. Ne vous contentez pas de traiter WEB-INF/classes comme un répertoire "magique".

5
Brian

J'ai passé beaucoup de temps à comprendre pourquoi le log4j.properties le fichier n'est pas vu. 
Ensuite, j'ai remarqué qu'il était visible pour le projet uniquement lorsqu'il se trouvait à la fois MyProject/target/classes / et MyProject/src/main/resources Dossiers. 
J'espère que ça va être utile à quelqu'un. 
PS: Le projet était basé sur Maven.

5
RedCH

J'ai constaté que Glassfish, par défaut, considère [répertoire d'installation Glassfish]\glassfish\domaines [votre domaine]\comme répertoire de travail par défaut ... vous pouvez déposer le fichier log4j.properties à cet emplacement et l'initialiser dans votre code à l'aide de PropertyConfigurator comme mentionné précédemment...

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");
3
Durandal00

Si vous avez une configuration standard de projet Maven avec Intellij, vous pouvez simplement placer le fichier de propriétés log4j dans: 

projet/src/main/ressources

IntelliJ - emplacement des propriétés log4j

1
Robert Squire

Je ne sais pas si cela est correct. Mais cela a résolu mon problème . Mettez le fichier log4j.properties dans "dossier du projet"/config et utilisez PropertyConfigurator.configure ("config // log4j.properties");

cela fonctionnera avec IDE mais pas lorsque vous exécuterez le fichier jar vous-même . lorsque vous exécuterez le fichier jar vous-même, copiez simplement le fichier log4j.properties dans le dossier dans lequel se trouve le fichier jar. fichier de propriété dans le même répertoire, il fonctionne bien.

1
sampathpremarathna

Mettez log4j.properties dans classpath . Voici les 2 cas qui vous aideront à identifier le bon emplacement -.__ 1. Pour les applications Web, le chemin d'accès aux classes est/WEB-INF/classes. 

\WEB-INF      
    classes\
        log4j.properties
  1. Pour tester à partir de main/unit test, le classpath est le répertoire source 

    \Project\
       src\
          log4j.properties
    
1
Sharif

En fait, je viens de rencontrer ce problème dans une structure de projet Java stardard comme suit:

\myproject
    \src
    \libs
    \res\log4j.properties

Dans Eclipse, je dois ajouter le dossier res au chemin de construction. Cependant, dans Intellij, je dois marquer le dossier res comme ressources, comme le montre la capture d'écran associée: cliquez à droite sur le dossier res et marquez en tant que ressources .

0
Miracle Chan

Vous n'avez pas besoin de spécifier PropertyConfigurator.configure("log4j.properties"); dans votre classe Log4J, si vous avez déjà défini le fichier log4j.properties dans la structure de votre projet.

En cas de projet Web dynamique: -

Vous devez enregistrer votre log4j.properties sous WebContent -> WEB-INF -> log4j.properties

J'espère que cela peut vous aider.

0
Manish Patel

Il y a plusieurs façons de le faire:

Way1: Si vous essayez dans le projet maven sans utiliser PropertyConfigurator

Premier: vérifier le répertoire des ressources à scr/main

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

suit la capture d'écran:

 ![enter image description here

Way2: Si vous essayez avec le fichier de propriétés pour Java/projet maven Use PropertyConfigurator 

Placez le fichier de propriétés n'importe où dans le projet et indiquez le chemin correct . dire: src/javaLog4jProperties/log4j.properties

statique{

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

 enter image description here

Way3: Si vous essayez avec XML sur Java/projet maven Utilisez DOMConfigurator 

Placez le fichier de propriétés n'importe où dans le projet et indiquez le chemin correct . dire: src/javaLog4jProperties/log4j.xml

statique{

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

 enter image description here

0
Shivendra Pandey