Composición de componentes de Log4j
Log4j consta de tres componentes importantes:
1. Prioridad de la información de registro (Logger)
2. El destino de salida de la información del registro (Appender)
3. Formato de salida (diseño) de la información del registro.
resumen:
Las prioridades de la información de registro de mayor a menor incluyen ERROR, WARN, INFO y DEBUG, que se utilizan para especificar la importancia de esta información de registro respectivamente;
El destino de salida de la información del registro especifica si el registro se imprimirá en la consola o en un archivo;
El formato de salida controla el contenido de visualización de la información del registro.
Introducción a Log4j
Log4j es un proyecto de código abierto de Apache. Al usar Log4j, podemos controlar el destino de la transmisión de información de registro a consolas, archivos, componentes GUI e incluso servidores de socket, grabadores de eventos NT, demonios Syslog de UNIX, etc. el formato de salida de cada registro Al definir el nivel de cada información de registro, podemos controlar el proceso de generación de registros con más detalle. log4j-- registro para java (registro de java).
Dirección de descarga de Log4j: http://logging.apache.org/log4j/2.x/download.html
Formato del archivo de configuración log4j
Log4j admite dos formatos de archivos de configuración:
1. Archivos en formato XML
2. Archivos en formato de propiedades
Tampoco puede utilizar el archivo de configuración en absoluto, sino configurar el entorno Log4j en código. Sin embargo, el uso de archivos de configuración hará que su aplicación sea más flexible.
Archivo de configuración de definición de Log4j
1. Configurar el registrador raíz
Su sintaxis es:
Descripción del parámetro:
El nivel es la prioridad de registro, que se divide en APAGADO, FATAL, ERROR, ADVERTENCIA, INFORMACIÓN, DEPURACIÓN, TODOS o el nivel que usted defina.
Desactivado: el nivel más alto, utilizado para desactivar todos los registros
Fatal: indica que cada evento de error fatal hará que la aplicación se cierre.
Error: indica que aunque ocurre un evento de error, todavía no afecta la operación continua del sistema.
Advertencia: indica que se producirá una posible situación de error
Información: generalmente se usa en un nivel de grano grueso, enfatizando todo el proceso de ejecución de la aplicación.
Depurar: en general y en un nivel general, enfatizando todo el proceso de ejecución de la aplicación.
Todo: el nivel más bajo, utilizado para activar todos los registros.
Log4j recomienda usar solo cuatro niveles. Las prioridades de mayor a menor son ERROR, WARN, INFO y DEBUG. A través de los niveles definidos aquí, puede controlar el encendido y apagado del nivel correspondiente de información de registro en la aplicación.
appenderName se refiere a dónde se genera la información del registro y se pueden especificar varios destinos de salida al mismo tiempo.
2. Configure el Apéndice de destino de salida de información de registro
Su sintaxis es:
log4j.appender.appenderName.opción1 = valor1
...
log4j.appender.appenderName.opción = valorN
org.apache.log4j.ConsoleAppender(Consola)
org.apache.log4j.FileAppender(Archivo)
org.apache.log4j.DailyRollingFileAppender (genera un archivo de registro todos los días)
org.apache.log4j.RollingFileAppender (genera un nuevo archivo cuando el tamaño del archivo alcanza el tamaño especificado)
org.apache.log4j.WriterAppender (envía información de registro en formato de transmisión a cualquier lugar especificado)
3. Configure el formato de la información de registro.
La sintaxis es:
log4j.appender.appenderName.layout.option1 = valor1…
log4j.appender.appenderName.layout.option = valorN
org.apache.log4j.HTMLLayout (diseño en formato de tabla HTML),
org.apache.log4j.PatternLayout (puede especificar patrones de diseño de manera flexible),
org.apache.log4j.SimpleLayout (contiene el nivel y la cadena de información de la información del registro),
org.apache.log4j.TTCCLayout (contiene información sobre el tiempo de generación del registro, subproceso, categoría, etc.)
Log4J utiliza un formato de impresión similar a la función printf en lenguaje C para formatear la información del registro. Los parámetros de impresión son los siguientes:
%mEnvía el mensaje especificado en el código.
%p prioridad de salida, es decir, DEBUG, INFO, WARN, ERROR, FATAL
%r genera la cantidad de milisegundos que tomó desde el inicio de la aplicación hasta la salida de la información del registro.
%c genera la categoría a la que pertenece, normalmente el nombre completo de la clase.
%tMuestra el nombre del hilo que generó el evento de registro.
%n genera un carácter de retorno de carro y avance de línea, que es "rn" en la plataforma Windows y "n" en la plataforma Unix.
%d genera la fecha u hora del punto de tiempo del registro. El formato predeterminado es ISO8601. También puede especificar el formato después, como por ejemplo: %d{yyyMMMddHH:mm:ss,SSS}. 2002 22:10:28,921
%l Muestra la ubicación donde ocurrió el evento de registro, incluido el nombre de la categoría, el hilo donde ocurrió y el número de línea en el código. Ejemplo: Testlog4.main(TestLog4.java:10)
%x: genera el NDC (entorno de diagnóstico anidado) asociado con el subproceso actual, especialmente utilizado en aplicaciones multicliente y multiproceso como javaservlets.
%%: genera un carácter "%" %F: genera el nombre del archivo donde se genera el mensaje de registro
%L: número de línea en el código de salida
%m: genera el mensaje especificado en el código y la información de registro específica generada
%n: genera un carácter de retorno de carro y avance de línea, que es "/r/n" en la plataforma Windows y "/n" en la plataforma Unix. Al generar información de registro, puede agregar modificadores entre % y el carácter de modo. controlar su ancho mínimo y ancho máximo, y la alineación del texto.
como:
1)%20c: especifique el nombre de la categoría de salida. El ancho mínimo es 20. Si el nombre de la categoría es menor que 20, estará alineado a la derecha de forma predeterminada.
2)%-20c: especifique el nombre de la categoría de salida. El ancho mínimo es 20. Si el nombre de la categoría es menor que 20, el signo "-" especifica la alineación a la izquierda.
3)%.30c: especifique el nombre de la categoría de salida. El ancho máximo es 30. Si el nombre de la categoría es mayor que 30, los caracteres adicionales a la izquierda se cortarán, pero si es menor que 30, se eliminarán. no habrá espacios.
4)%20.30c: Si el nombre de la categoría tiene menos de 20 caracteres, complete los espacios y justifíquelo a la derecha. Si el nombre tiene más de 30 caracteres, trunca los caracteres del lado izquierdo.
Método de configuración de log4j.xml
<?xml versión="1.0" codificación="UTF-8"?>
<!DOCTYPE log4j:configuración SISTEMA "log4j.dtd">
<log4j:configuración xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender nombre="appender1"
>
<param nombre="Archivo" valor="logfile08.html" />
<param nombre="MaxFileSize" valor="1MB" />
<param nombre="MaxBackupIndex" valor="5" />
<diseño>
</diseño>
</appender>
<raíz>
<valor de nivel="depurar" />
<appender-ref ref="appender1" />
</raíz>
</log4j:configuración>
Antes de usar Log4j en el programa, primero importe commons-logging.jar y logging-log4j-1.2.9.jar al classpath y coloque log4j.properties en el directorio raíz src. Para usar log4j en una clase, primero declare una variable estática Loggerlogger=Logger.getLog("classname").
El uso es el siguiente: logger.debug("debugmessage") o logger.info("infomessage").
1. Consigue el registrador
Usando Log4j, el primer paso es obtener un registrador, que será responsable de controlar la información del registro.
Su sintaxis es:
publicstaticLoggergetLogger(nombre de cadena)
Obtiene el registrador con el nombre especificado y, si es necesario, crea un nuevo registrador para ese nombre. Nombre generalmente toma el nombre de esta clase, como por ejemplo:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Lea el archivo de configuración.
Después de obtener el registrador, el segundo paso es configurar el entorno Log4j. La sintaxis es:
BasicConfigurator.configure(): utiliza automática y rápidamente el entorno Log4j predeterminado.
PropertyConfigurator.configure (StringconfigFilename): lee el archivo de configuración escrito utilizando el archivo de propiedades de Java.
DOMConfigurator.configure (Stringfilename): lee el archivo de configuración en formato XML.
3. Insertar información de registro (información de registro formateada)
Cuando se completen los dos pasos necesarios anteriores, podrá utilizar fácilmente declaraciones de registro con diferentes prioridades para insertarlas en cualquier lugar donde desee iniciar sesión. La sintaxis es la siguiente:
Logger.debug (mensaje de objeto);
Logger.info (mensaje de objeto);
Logger.warn (mensaje de objeto);
Logger.error (mensaje de objeto);
Demostración del programa
1. Utilice un programa para generar información de registro
importar java.io.IOException;
importar org.apache.commons.logging.impl.Log4JLogger;
importar org.apache.log4j.BasicConfigurator;
importar org.apache.log4j.FileAppender;
importar org.apache.log4j.Layout;
importar org.apache.log4j.Level;
importar org.apache.log4j.Logger;
importar org.apache.log4j.SimpleLayout;
/**
*
* @versión: 1.1
*
* @autor: Su Ruonian<a href="mailto:[email protected]">Enviar correo electrónico</a>
*
* @since: 1.0 Hora de creación: 2013-1-1 03:19:42 pm
*
* @función: genera el registro a través del código
*
*/
clase pública Log4jPrintByCode {
registrador estático privado registrador = Logger.getLogger(Log4jPrintByCode.class);
Diseño privado diseño = nuevo SimpleLayout();
fileAppender privado fileAppender;
//Utiliza dependencias de construcción e inicializa al crear objetos.
public Log4jPrintByCode (diseño, nivel de nivel, cadena distDir) {
BasicConfigurator.configure(); //Utilice la información de configuración predeterminada, no es necesario escribir log4j.properties
intentar {
init(diseño, nivel, distDir);
} captura (Excepción e) {
e.printStackTrace();
}
}
public void init (diseño, nivel de nivel, cadena distDir) arroja una excepción {
logger.setLevel(level); //Establece el nivel de salida del registro
fileAppender = nuevo FileAppender (diseño, distDir, falso);
logger.addAppender(fileAppender); //Agregar terminal de salida
}
público estático vacío principal (String [] argumentos) {
Diseño SimpleLayout = nuevo SimpleLayout();
Cadena logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = nuevo Log4jPrintByCode(layout,Level.INFO,logDir);
//Se generará la siguiente información
log4jCode.logger.info("información de registro impresa por log4j");
log4jCode.logger.warn("advertencia de registro impresa por log4j");
log4jCode.logger.error("error de registro impreso por log4j");
}
Diseño público getLayout() {
diseño de retorno;
}
setLayout público vacío (diseño de diseño) {
this.layout = diseño;
}
público FileAppender getFileAppender() {
devolver archivoAppender;
}
setFileAppender público vacío (FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// Registrar información de nivel de información
si (logger.isInfoEnabled()) {
logger.info("Este es un mensaje informativo de Dao.");
}
2.Log4J genera la misma información de registro en múltiples destinos
/* Cambiar base de datos */
utilizar db_log4j;
/* Tabla de información de registro */
crear tabla tb_log(
logId int no nulo auto_increment comentario 'número de serie',
createDate varchar(45) comentario nulo predeterminado 'Tiempo de generación de registro',
hilo varchar(45) comentario nulo predeterminado 'hilo actual',
nivel varchar(45) comentario nulo predeterminado 'Nivel de registro actual',
clase varchar(45) comentario nulo predeterminado 'Generar clase de registro',
mensaje varchar(245) comentario nulo predeterminado 'Registrar información específica',
clave principal (logId)
);
La instancia de la aplicación envía información de registro a la consola, el archivo y la base de datos al mismo tiempo.
Crear base de datos y tablas.
/* Cambiar base de datos */
utilizar db_log4j;
/* Tabla de información de registro */
crear tabla tb_log(
logId int no nulo auto_increment comentario 'número de serie',
createDate varchar(45) comentario nulo predeterminado 'Tiempo de generación de registro',
hilo varchar(45) comentario nulo predeterminado 'hilo actual',
nivel varchar(45) comentario nulo predeterminado 'Nivel de registro actual',
clase varchar(45) comentario nulo predeterminado 'Generar clase de registro',
mensaje varchar(245) comentario nulo predeterminado 'Registrar información específica',
clave principal (logId)
);
#Definir la salida A1 al controlador
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Defina el modo de diseño de A1 como PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Definir el formato de salida de A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Definir salida A2 para archivo
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Definir a qué archivo sale A2
log4j.appender.A2.File=./log/sysLog.log
#Defina la longitud máxima del archivo de salida A2
log4j.appender.A2.MaxFileSize = 1KB
#Defina la cantidad de archivos de respaldo para A2
log4j.appender.A2.MaxBackupIndex = 3
#Defina el modo de diseño de A2 como PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Definir el modo de salida de A2
log4j.appender.A2.layout.ConversionPattern=%d{aaaa-MM-dd hh:mm:ss}:%p %t %c - %m%n
#Definir salida A3 a la base de datos
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=raíz
log4j.appender.A3.contraseña=raíz
#Definir el diseño de A3 y las sentencias SQL ejecutadas
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERTAR EN tb_log(createDate,thread,level,class,message) valores('%d','%t','%-5p','%c','%m ')
importar org.apache.log4j.Logger;
importar org.apache.log4j.PropertyConfigurator;
/**
*
* @versión: 1.1
*
* @autor: Su Ruonian<a href="mailto:[email protected]">Enviar correo electrónico</a>
*
* @since: 1.0 Hora de creación: 2013-1-1 04:13:59 p.m.
*
* @función: controla la salida de información de registro a múltiples destinos a través de archivos de configuración
*
*/
clase pública Log4jPrintByConfigure {
registrador estático privado registrador = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main (String [] args) lanza una excepción {
//Carga el archivo de configuración de registro log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//El archivo se almacena en la carpeta de configuración en el mismo directorio que src
// Si se coloca en src, los parámetros deben ser "bin/log4j.properties" o "src/log4j.properties". Se recomienda utilizar bin como estándar.
//Se imprimirá la siguiente información
logger.debug("logger imprime mensaje DEBUG");
logger.info("mensaje de información de impresión del registrador");
logger.warn("logger imprime mensaje de ADVERTENCIA");
logger.error("mensaje de ERROR de impresión del registrador");
logger.fatal("Aquí está el mensaje FATAL");
}
}