Escribí un proyecto de servicio web utilizando netbeans 6.7.1 con glassfish v2.1, log4j.propiedades a la raíz de directorios del proyecto y el uso:

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

en el Constructor:

PropertyConfigurator.configure("log4j.properties");

y en funciones:

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

pero, es información de error(en realidad, he intentado poner casi todos los directorios que yo podría realizar):

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.

el proyecto de ejemplo que se podría obtener a partir de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8

  • ¿Cuál es el propósito de la PropertyConfigurator.configurar(«log4j.propiedades»); línea ? Yo nunca uso este. Su log4j.xml archivo sólo debe ser «un lugar» en el classpath.
  • La mirada en stackoverflow.com/questions/1140358/… para encontrar, cómo la configuración de log4j en sí que se está registrando. Creo que esto debería ayudarle mucho, porque algunos contenedores tienen su propia configuración de log4j.
  • He quitado ese maldito línea y trabajó como un encanto. Hombre, lo que es un paseo..
InformationsquelleAutor mono | 2009-09-28

18 Comentarios

  1. 112

    Sé que es un poco tarde para responder a esta pregunta, y tal vez usted ya ha encontrado la solución, pero voy a postear la solución que encontré (después de googlear mucho), lo que puede ayudar un poco:

    1. Poner log4j.propiedades en WEB-INF\classes del proyecto como se mencionó anteriormente en este hilo.
    2. Poner log4j-xx.jar en WEB-INF\lib
    3. Prueba si log4j fue cargado: añadir -Dlog4j.debug @ al final de sus opciones de java de tomcat

    Espero que esto ayude.

    rgds

    • Gracias por esa última puntero sobre -Dlog4j.de depuración. Eso me ayudó mucho.
    • Impresionante – adición-Dlog4j.debug me permitió averiguar qué es exactamente lo que estaba pasando mal w/ mi log4j.archivo de propiedades.
    • El uso de la ‘ejecutar’ comando para obtener tomcat en primer plano; puede pasar en las opciones de java a través de la línea de comandos. También, la opción-x para bash es útil para ver exactamente lo que sucede en sus opciones: JAVA_OPTS=-Dlog4j.depuración bash -x /usr/local/tomcat/bin/catalina.sh ejecutar
  2. 44

    Como ya se ha dicho, log4j.propiedades deben estar en un directorio incluido en el classpath, quiero agregar que en un mavenized proyecto un buen lugar puede ser src/main/resources/log4j.properties

  3. 26

    Puede especificar el archivo de configuración de ubicación con VM argumento -Dlog4j.configuración=»file:/C:/workspace3/local/log4j.propiedades»

    • Esta es la mejor opción, ya que le permite establecer las opciones de como volver a examinar o cambiar los niveles de registro independiente de la implementación de la aplicación
    • es file:/ / o file:/// o /ruta/a/archivo en un sistema unix?
    • Para windows es file:/ , supongo que unix es el mismo
    • Esta es la omi la única respuesta que toma que toma múltiples entornos en cuenta que tienen diferentes niveles de registro.
    • En macOS, en la Libertad del Servidor de la jvm.opciones no utilice comillas y el uso de file:///
  4. 25

    Tienes que poner en el directorio raíz, que corresponde a su contexto de ejecución.

    Ejemplo:

        MyProject
           src
               MyClass.java
               log4j.properties

    Si inicia la ejecución de un proyecto diferente, usted necesita tener el archivo utilizado en el proyecto para el inicio de la ejecución. Por ejemplo, si un proyecto diferente y tiene algunos de los tests JUnit, necesita tener también su log4j.archivo de propiedades.


    Me sugieren el uso de log4j.xml en lugar de la de log4j.propiedades. Usted tiene más opciones, busque la ayuda de su IDE y así sucesivamente…

    • en el ejemplo, casi se me puso cada directorio. pero no es útil para Glassfish implementar el proyecto, ya que GF no copiar propiedades para el directorio correcto. Parece GF hacer lo pierde.
    • en realidad, creo que el problema es el auto-despliegue de netbeans. Trato de implementar por la guerra de archivo en la consola de administración, está bien. No sé si estaba en lo cierto. Si estaba en lo cierto, ¿por qué netbeans no implementar estos archivos cuando el auto-implementar el proyecto.
    • funcionó ! pero no es poco elegante … que creo que es mejor colocado en un «recurso» tipo de carpeta.
  5. 16

    Para una Maven Proyecto Basado en mantener su log4j.propiedades en src/main/resources. Nada más que hacer!

    • Eso es todo, y es la misma que para otras propiedades de los archivos como XMLConfiguration en Proyectos Maven. Gracias!
  6. 14

    Si pones log4j.propiedades dentro de src, usted no necesita utilizar la declaración –

    PropertyConfigurator.configure("log4j.properties");

    Será llevado automáticamente como un archivo de propiedades se encuentra en el classpath.

  7. 10

    Tratar:

    PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
  8. 9

    El archivo debe estar ubicado en el WEB-INF/classes directorio.
    Esta estructura de directorios debe ser empaquetado en el archivo war.

    • en teoría, es la respuesta, pero el problema es log4j.propiedades es perdida cuando glassfish desplegar la guerra de archivo.
    • Debe ser en WEB-INF/classes y empaquetado en el archivo war
    • al menos en la descarga del archivo que NO hay log4j.propiedades en web/WEB-INF/classes. Martin es un derecho, que es donde debe estar.
    • El truco es, lo pones en tu carpeta src, (El origen de la raíz de la carpeta), en el proceso de Construcción de su código, el archivo se transfiere a la carpeta de clases de forma automática…
  9. 7

    Mi IDE de NetBeans. Me puse de log4j.archivo de propiedades como se muestra en las fotos

    Raíz

    Donde debo colocar el log4j.archivo de propiedades?

    Web

    Donde debo colocar el log4j.archivo de propiedades?

    WEB-INF

    Donde debo colocar el log4j.archivo de propiedades?

    Para utilizar este archivo de propiedades usted debe escribir este código:

    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");
        }
    }

    Puede definir estática ServletContext contexto de otro archivo JSP.
    Ejemplo:

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

    Ahora, usted puede usar log4j.archivo de propiedades en sus proyectos.

  10. 5

    Unos técnicamente correcto respuestas específicas ya previsto, pero en general, puede ser en cualquier lugar de la ruta de clases en tiempo de ejecución, es decir, donde las clases son buscados por la JVM.

    Este podría ser el /src dir en Eclipse o WEB-INF/classes directorio en su aplicación implementados, pero es mejor ser conscientes de la ruta de clases de concepto y por qué el archivo se coloca en ella, no sólo el tratamiento de WEB-INF/classes como «magia» del directorio.

  11. 5

    He gastado una gran cantidad de tiempo para averiguar por qué el log4j.propiedades del archivo que no se ve.

    Entonces me di cuenta de que era visible para el proyecto sólo cuando era tanto Miproyecto/destino/clases/ y Miproyecto/src/main/resources carpetas.

    Espero que va a ser útil para alguien.

    PS: El proyecto fue maven-basado.

  12. 3

    He encontrado que Glassfish por defecto está mirando [Glassfish ubicación de instalación]\glassfish\dominios[su dominio]\ como el directorio de trabajo predeterminado… puedes colocar el log4j.propiedades de archivo en esta ubicación y se inicializa en su código utilizando PropertyConfigurator como se ha mencionado anteriormente…

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

    No sé, esta es la forma correcta.Pero resuelto mi problema.
    poner log4j.propiedades de archivo en el «proyecto de la carpeta»/configuración y el uso de PropertyConfigurator.configurar(«config//log4j.propiedades»);

    se trabaja con el IDE, pero no cuando se ejecuta el archivo jar a ti mismo.
    al ejecutar el archivo jar por sí mismo sólo tienes que copiar el log4j.propiedades de archivo en la carpeta que el archivo jar es en.cuando el tarro y la propiedad de archivo en el mismo directorio se ejecuta bien.

  14. 1

    Poner log4j.propiedades en el classpath.
    Aquí está la 2 casos que le ayudará a identificar la ubicación correcta-
    1. Para la aplicación web en la ruta de clases es /WEB-INF/classes.

    \WEB-INF      
        classes\
            log4j.properties
    1. A prueba de principal /unidad de prueba de la ruta de clases es el directorio de origen

      \Project\
         src\
            log4j.properties
  15. 1

    Hay muchas maneras de hacerlo:

    Way1: Si usted está tratando en el proyecto de maven sin Usar PropertyConfigurator

    Primero:
    comprobar directorio de recursos en scr/principal

      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.

    sigue la captura de pantalla:

    Donde debo colocar el log4j.archivo de propiedades?

    Way2: Si usted está tratando con el archivo de Propiedades java/proyecto de maven Uso PropertyConfigurator

    Lugar de las propiedades de archivo en cualquier lugar en el proyecto y darle la ruta de acceso correcta.
    decir: src/javaLog4jProperties/log4j.propiedades

    static{

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

    }

    Donde debo colocar el log4j.archivo de propiedades?

    Way3: Si usted está tratando con xml en java/proyecto de maven Uso DOMConfigurator

    Lugar de las propiedades de archivo en cualquier lugar en el proyecto y dar la ruta de acceso correcta.
    decir: src/javaLog4jProperties/log4j.xml

    static{

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

    }

    Donde debo colocar el log4j.archivo de propiedades?

  16. 0

    No es necesario especificar PropertyConfigurator.configure("log4j.properties"); en su Log4J clase, Si ya ha definido el log4j.propiedades en su estructura de proyecto.

    En el caso de la Web de la Dinámica del Proyecto: –

    Usted necesita para salvar su log4j.propiedades de bajo contenido web -> WEB-INF -> log4j.propiedades

    Espero que esto pueda ayudar.

Dejar respuesta

Please enter your comment!
Please enter your name here