configurar - log4j2 json configuration example
¿Cómo inicializar log4j correctamente? (20)
Después de agregar log4j a mi aplicación, obtengo el siguiente resultado cada vez que ejecuto mi aplicación:
log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser). log4j:WARN Please initialize the log4j system properly.
Parece que esto significa que falta un archivo de configuración. ¿Dónde debería ubicarse este archivo de configuración y qué es un buen contenido para comenzar?
Estoy usando plain java para desarrollar una aplicación de escritorio. Así que no hay servidor web, etc ...
¿Qué estás desarrollando en? ¿Estás utilizando Apache Tomcat?
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n
Tengo propiedades como esta en una de mis aplicaciones Java.
Busque un log4j.properties o log4j.xml en línea que tenga un agregador de raíz y colóquelo en su classpath.
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
se registrará en la consola. Prefiero iniciar sesión en un archivo para que pueda investigar después.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file
aunque para aplicaciones de registro detallado, 100KB generalmente se debe aumentar a 1MB o 10MB, especialmente para la depuración.
Personalmente, configuro varios registradores y configuro el registrador raíz para advertir o nivel de error en lugar de depurar.
Como se explicó anteriormente hay 2 enfoques.
El primero es agregar esta línea a tu método principal:
BasicConfigurator.configure();
El segundo enfoque es agregar este archivo log4j.properties estándar a su ruta de clase:
Mientras toma el segundo enfoque, debe asegurarse de que inicializa el archivo correctamente.
P.ej.
Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");
Asegúrese de crear la carpeta requerida para almacenar los archivos de registro.
Esta es una forma alternativa usando .yaml
Estructura lógica:
Configuration:
Properties:
Appenders:
Loggers:
Muestra:
Configutation:
name: Default
Properties:
Property:
name: log-path
value: "logs"
Appenders:
Console:
name: Console_Appender
target: SYSTEM_OUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
File:
name: File_Appender
fileName: ${log-path}/logfile.log
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
Loggers:
Root:
level: debug
AppenderRef:
- ref: Console_Appender
Logger:
- name: <package>.<subpackage>.<subsubpackage>.<...>
level: debug
AppenderRef:
- ref: File_Appender
level: error
He creado el archivo log4j.properties en la carpeta de recursos junto al archivo hibernate.cfg.xml y lo he llenado con el texto a continuación:
log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n
Ahora me deshice de advertencias y errores.
Intente establecer el atributo de depuración en log4j: nodo de configuración en verdadero.
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
Imprime información a medida que se lee el archivo de configuración y se usa para configurar el entorno log4j. Es posible que tenga más detalles para resolver su problema.
Log4j busca de forma predeterminada un archivo llamado log4j.properties o log4j.xml en la ruta de clase. Puede controlar qué archivo utiliza para inicializarse configurando las propiedades del sistema como se describe logging.apache.org/log4j/1.2/manual.html (busque la sección "Procedimiento de inicialización predeterminado").
Por ejemplo:
java -Dlog4j.configuration=customName ....
Hará que log4j busque un archivo llamado customName en el classpath.
Si tiene problemas, me resulta útil activar log4j.debug:
-Dlog4j.debug
Se imprimirá en el sistema toda la información útil sobre qué archivo se utilizó para inicializarse, qué registradores / agregadores se configuraron y cómo, etc.
El archivo de configuración puede ser un archivo de propiedades java o un archivo xml. Aquí hay una muestra del formato del archivo de propiedades tomado de logging.apache.org/log4j/1.2/manual.html :
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller''s file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Mi log4j se corrigió por debajo del archivo de propiedades:
## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file
Otra forma de hacerlo sin poner el archivo de propiedades en la ruta de clase, es establecer la propiedad desde el código java directamente. Aquí está el código de ejemplo.
public class Log4JSample {
public static void main(String[] args) {
Properties properties=new Properties();
properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
properties.setProperty("log4j.rootCategory","TRACE");
properties.setProperty("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender");
properties.setProperty("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");
properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
properties.setProperty("log4j.appender.MyFile.layout", "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");
PropertyConfigurator.configure(properties);
Logger logger = Logger.getLogger("MyFile");
logger.fatal("This is a FATAL message.");
logger.error("This is an ERROR message.");
logger.warn("This is a WARN message.");
logger.info("This is an INFO message.");
logger.debug("This is a DEBUG message.");
logger.trace("This is a TRACE message.");
}
}
Para habilitar -Dlog4j.debug
, voy a Sistema, Configuración avanzada del sistema, Variables de entorno y Establecer la variable del sistema _JAVA_OPTIONS
en -Dlog4j.debug
.
Para las pruebas, una forma rápida y sucia que incluye la configuración del nivel de registro:
org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);
// set to Level.DEBUG for full, or Level.OFF..
Puede configurar el nivel de registro utilizando setLevel() .
Los niveles son útiles para configurar fácilmente el tipo de información que desea que muestre el programa.
Por ejemplo:
Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages
El conjunto de niveles posibles son:
RASTRO,
DEPURAR,
INFO,
ADVERTIR,
ERROR y
FATAL
De acuerdo al logging.apache.org/log4j/1.2/manual.html
Puede establecer la ubicación de su log4j.properties dentro de su aplicación java usando:
org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)
Más información está disponible aquí: https://logging.apache.org/log4j/1.2/manual.html
Según la página de preguntas frecuentes de Apache Log4j :
¿Por qué veo una advertencia sobre "No se encontraron agregadores para el registrador" y "Configure log4j correctamente"?
Esto ocurre cuando los archivos de configuración predeterminados
log4j.properties
ylog4j.xml
no se pueden encontrar y la aplicación no realiza una configuración explícita.log4j
utilizaThread.getContextClassLoader().getResource()
para localizar los archivos de configuración predeterminados y no comprueba directamente el sistema de archivos. Conocer la ubicación adecuada para colocar log4j.properties olog4j.xml
requiere comprender la estrategia de búsqueda del cargador de clases en uso.log4j
no proporciona una configuración predeterminada ya que la salida a la consola o al sistema de archivos puede estar prohibida en algunos entornos.
Básicamente, la advertencia No se encontraron agregadores para el registrador significa que está usando el sistema de registro log4j
, pero no ha agregado ningún Anexador (como FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) en su archivo de configuración o el archivo de configuración Está perdido.
Hay tres formas de configurar log4j: con un archivo de propiedades ( log4j.properties
), con un archivo XML y mediante código Java ( rootLogger.addAppender(new NullAppender());
).
log4j.properties
Si tiene un archivo de propiedades presente (por ejemplo, al instalar Solr), debe colocar este archivo en su directorio classpath .
ruta de clase
Aquí hay algunas sugerencias de comandos en Linux para determinar su valor de classpath:
$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?
o desde Java: System.getProperty("java.class.path")
.
Log4j XML
A continuación se muestra un archivo de configuración XML básico para log4j en formato XML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
Gato
Si está utilizando Tomcat, puede colocar su log4j.properties
en: /usr/share/tomcat?/lib/
or /var/lib/tomcat?/webapps/*/WEB-INF/lib/
.
Solr
Para la referencia, el archivo log4j.properties
predeterminado de Solr se ve así:
# Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x /u2013 %m%n
#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9
#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m/n
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN
# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
¿Por qué log4j no puede encontrar mi archivo de propiedades en una aplicación J2EE o WAR?
La respuesta corta: las clases log4j y el archivo de propiedades no están dentro del alcance del mismo cargador de clases.
Log4j solo usa el mecanismo predeterminado
Class.forName()
para cargar clases. Los recursos se manejan de manera similar. Consulte la documentación dejava.lang.ClassLoader
para obtener más detalles.Por lo tanto, si tiene problemas, intente cargar la clase o el recurso usted mismo. Si no lo encuentras, tampoco lo hará log4j. ;)
Ver también:
- logging.apache.org/log4j/1.2/manual.html en el sitio de Apache
- Apache: Servicios de registro: Preguntas frecuentes en el sitio de Apache
Si acaba de deshacerse de todo (por ejemplo, si está en pruebas)
org.apache.log4j.BasicConfigurator.configure(new NullAppender());
Si bien configurar log4j correctamente es ideal para proyectos "reales", es posible que desee una solución rápida y sucia, por ejemplo, si solo está probando una nueva biblioteca.
Si es así una llamada al método estático.
org.apache.log4j.BasicConfigurator.configure();
configurará el registro básico en la consola, y los mensajes de error desaparecerán.
Si estamos usando el contenedor de registro de apache commons encima de log4j, entonces debemos tener los dos archivos jar disponibles en classpath. Además, commons-logging.properties
y log4j.properties/xml
deberían estar disponibles en classpath.
También podemos pasar la clase de implementación y el nombre log4j.properties
como JAVA_OPTS
usando -Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>
. Lo mismo se puede hacer configurando JAVA_OPTS
en el caso de la aplicación / servidor web.
Ayudará a externalizar las propiedades que se pueden cambiar en la implementación.
Simplemente, cree log4j.properties en la carpeta src / main / assembly. Dependiendo de si desea que los mensajes de registro se muestren en la consola o en el archivo, modifique su archivo. Lo siguiente va a mostrar tus mensajes en la consola.
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
API de registro: la API de registro de Java facilita el servicio y el mantenimiento del software en los sitios de los clientes al producir informes de registro adecuados para el análisis de los usuarios finales, administradores de sistemas, ingenieros de servicio de campo y equipos de desarrollo de software. Las API de registro capturan información como fallas de seguridad, errores de configuración, cuellos de botella de rendimiento y / o errores en la aplicación o plataforma. El paquete principal incluye soporte para entregar registros de texto sin formato o registros de formato XML a la memoria, flujos de salida, consolas, archivos y sockets. Además, las API de registro pueden interactuar con los servicios de registro que ya existen en el sistema operativo host.
Package java.util.logging «Proporciona las clases e interfaces de las instalaciones de registro de la plataforma Java.
Log4j 1.x «log4j es una popular utilidad de registro basada en Java. Log4j es un proyecto de código abierto basado en el trabajo de muchos autores. Permite al desarrollador controlar qué instrucciones de registro se envían a una variedad de ubicaciones mediante el uso de Anexos [consola, archivos, DB y correo electrónico]. Es totalmente configurable en tiempo de ejecución utilizando archivos de configuración externos.
Log4j tiene tres componentes principales:
- Loggers - [OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE]
Anexos
Apache Commons Logging: ConsoleAppender, FileAppender, RollingFileAppender, DailyRollingFileAppender, JDBCAppender-
Driver
, SocketAppenderLog4J Appender para MongoDB: MongoDbAppender -
Driver
- Diseños - [PatternLayout, EnhancedPatternLayout]
Los archivos de configuración se pueden escribir en XML o en el formato de propiedades de Java (clave = valor).
- log4j_External.properties «Formato de propiedades de Java (clave = valor)
La cadena entre una apertura " $ { " y el cierre " } " se interpreta como una clave. El valor de la variable sustituida se puede definir como una propiedad del sistema o en el propio archivo de configuración. Establecer opciones específicas de appender. «Log4j.appender.appenderName.option = value, para cada appender nombrado puede configurar su diseño.
log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql
#log.path=./
log.path=E:/Logs
# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n
# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}
# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}
# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern=''_''yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}
# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}
# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES (''%p'', ''%d{yyyy-MM-dd HH:mm:ss}'', ''%C'', ''%M'', ''%L'', ''%m'');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES (''%p'', ''%d{yyyy-MM-dd HH:mm:ss}'', ''%C'', ''%M'', ''%L'', ''%m'');
# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs
log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED
MySQL estructura de tabla para tabla logdata
CREATE TABLE IF NOT EXISTS `logdata` (
`Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`LineNumber` int(10) NOT NULL,
`Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- log4j_External.xml «XML log4j: configuración con archivo DTD público
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out" />
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="file" value="E:/Logs/logFile.log" />
<param name="append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/Logs/logRollingFile.log" />
<param name="immediateFlush" value="true"/>
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>
<appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="E:/Logs/logRollingDayFile.log" />
<param name="datePattern" value="''_''yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
</layout>
</appender>
<root>
<priority value="info" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE_PER_SIZE" />
<appender-ref ref="FILE_PER_DAY" />
</root>
</log4j:configuration>
- Configuración de Log4j desde la URL en el programa Java:
Para especificar una configuración personalizada con un archivo externo, la clase utilizada debe implementar la interfaz del Configurador .
cuando los archivos de configuración predeterminados "log4j.properties", "log4j.xml" no están disponibles
- Para "log4j.properties" puede ingresar al método PropertyConfigurator .configure (java.net.URL).
- Para "log4j.xml" se utilizará DOMConfigurator .
public class LogFiles {
// Define a static logger variable so that it references the Logger instance named "LogFiles".
static final Logger log = Logger.getLogger( LogFiles.class );
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
System.out.println("DEFAULT_XML_CONFIGURATION_FILE = ''log4j.xml'' « Default access modifier");
String fileName = //"";
//"log4j_External.xml";
"log4j_External.properties";
String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;
if( fileName.contains(".xml") ) {
DOMConfigurator.configure( configurationFile );
log.info("Extension *.xml");
} else if ( fileName.contains(".properties") ) {
PropertyConfigurator.configure( configurationFile );
log.info("Extension *.properties");
} else {
DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
dailyRollingAppender.setDatePattern("''_''yyyy-MM-dd");
PatternLayout layout = new PatternLayout();
layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
dailyRollingAppender.setLayout(layout);
dailyRollingAppender.activateOptions();
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.DEBUG);
rootLogger.addAppender(dailyRollingAppender);
log.info("Configuring from Java Class.");
}
log.info("Console.Message.");
method2();
methodException(0);
}
static void method2() {
log.info("method2 - Console.Message.");
}
static void methodException(int b) {
try {
int a = 10/b;
System.out.println("Result : "+ a);
log.info("Result : "+ a);
} catch (Exception ex) { // ArithmeticException: / by zero
log.error(String.format("/n/tException occurred: %s", stackTraceToString(ex)));
}
}
public static String stackTraceToString(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
return sw.toString();
}
}
import org.apache.log4j.BasicConfigurator;
Llama a este método
BasicConfigurator.configure();