Uso del registro común
A diferencia del registro proporcionado por la biblioteca estándar de Java Commons Logging
, es una biblioteca de registro de terceros, que es Apache
un módulo de registro creado por
Commons Logging
La característica es que puede montar diferentes sistemas de registro y especificar el sistema de registro montado a través del archivo de configuración. De manera predeterminada, Commons Loggin
busca y usa automáticamente Log4j
( Log4j
es otro sistema de registro popular) y Log4j
usa si no se encuentra JDK Logging
.
El uso Commons Logging
solo necesita tratar con dos clases y solo dos pasos:
El primer paso es LogFactory
obtener Log
la instancia de la clase; el segundo paso es usar Log
el método de la instancia para iniciar sesión.
El código de ejemplo es el siguiente:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main {
public static void main(String[] args) {
Log log = LogFactory.getLog(Main.class);
log.info("start...");
log.warn("end.");
}
}
Al ejecutar el código anterior, definitivamente obtendrá un error de compilación, similar error: package org.apache.commons.logging does not exist
(no se puede encontrar el paquete org.apache.commons.logging). Debido a Commons Logging
que es una biblioteca proporcionada por un tercero, debe descargarse primero. Después de descargar, descomprima, busque 到commons-logging-1.2.jar
este archivo y coloque el código fuente de Java Main.java
en un directorio, como work
el directorio:
work
│
├─ commons-logging-1.2.jar
│
└─ Main.java
Luego compile Main.java con javac y especifique el classpath al compilar; de lo contrario, el compilador no puede encontrar el paquete al que hacemos referencia org.apache.commons.logging
. El comando de compilación es el siguiente:
javac -cp commons-logging-1.2.jar Main.java `
Si la compilación es exitosa, habrá un archivo Main.class adicional en el directorio actual:
work
│
├─ commons-logging-1.2.jar
│
├─ Main.java
│
└─ Main.class
Ahora puede ejecutar este Main.class, use el comando java, también debe especificar el classpath, el comando es el siguiente:
java -cp .;commons-logging-1.2.jar Main
Tenga en cuenta que el classpath entrante tiene dos partes: una es ., la otra es commons-logging-1.2.jar
, separadas por ;. .
Indica el directorio actual Sin esto .
, la JVM no buscará Main.class en el directorio actual y reportará un error.
Si se ejecuta bajo Linux
o macOS
, tenga en cuenta classpath
que el delimitador no es ;, sino ::
java -cp .:commons-logging-1.2.jar Main
El resultado de la operación es el siguiente:
Mar 02, 2019 7:15:31 PM Main main
INFO: start...
Mar 02, 2019 7:15:31 PM Main main
WARNING: end.
Commons Logging
Se definen 6 niveles de registro:
FATAL
ERROR
WARNING
INFO
DEBUG
TRACE
默认级别是INFO。
Al usar Commons Logging
, si hace referencia a Iniciar sesión en un método estático, normalmente define directamente una variable de tipo estático:
// 在静态方法中引用Log:
public class Main {
static final Log log = LogFactory.getLog(Main.class);
static void foo() {
log.info("foo");
}
}
Referenciado en un método de instancia Log
, generalmente define una variable de instancia:
// 在实例方法中引用Log:
public class Person {
protected final Log log = LogFactory.getLog(getClass());
void foo() {
log.info("foo");
}
}
Nótese que la forma de obtener la variable de instancia log es LogFactory.getLog(getClass())
que aunque también se puede usar LogFactory.getLog(Person.class)
, el método anterior tiene una gran ventaja, es decir, las subclases pueden usar directamente la instancia de log. Por ejemplo:
// 在子类中使用父类实例化的log:
public class Student extends Person {
void bar() {
log.info("bar");
}
}
Debido a la naturaleza dinámica de la clase Java, el campo de registro obtenido por la subclase es en realidad equivalente LogFactory.getLog(Student.class)
, pero se hereda de la clase principal y no es necesario cambiar el código.
Además, Commons Logging
el método de registro, por ejemplo , proporciona un método sobrecargado muy útil info()
además del estándar : , lo que simplifica aún más el registro de excepciones:info(String)
info(String, Throwable)
try {
...
} catch (Exception e) {
log.error("got exception!", e);
}
Utilice log.error(String, Throwable)
la excepción de impresión.
resumen
Commons Logging
es el módulo de registro más utilizado;
Commons Logging
La API es muy simple;
Commons Logging
Los módulos de registro adicionales se pueden detectar y utilizar automáticamente.
Si ha ganado algo después de leer, también puede unirse a la discusión en la comunidad Knowledge Planet: