org.slf4j.Logger kann für allgemeine Zwecke verwendet werden, es ist jedoch erforderlich, die Protokollausgabeebene für Geschäftsanwendungen zu vereinheitlichen. Erstellen Sie daher einen erweiterten Logger, der nur die in der Geschäftsregel definierte Ablaufverfolgungsstufe ausgibt.
Erstellen Sie Ihre eigene Logger-Klasse, die org.slf4j.Logger umschließt. Überlassen Sie die Ausgabemethode einfach org.slf4j.Logger Die Debug-Ebene wird nur während der Entwicklung ausgegeben.
SystemLogger.java
/**
*
*/
package jp.co.product.system.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*Gemeinsame Klasse der Protokollausgabe
*
*/
public class SystemLogger {
private Logger logger;
/**
*Konstrukteur
*
* @param cls
* @see org.slf4j.LoggerFactory#getLogger(Class)
*/
public SystemLogger(Class<?> cls) {
logger = LoggerFactory.getLogger(cls);
}
/**
*Fehlerausgabe
*
* @param msg Inhalt der Protokollausgabe
* @see org.slf4j.Logger#error(String)
*/
public void error(String msg) {
logger.error(msg);
}
/**
*Informationsausgabe
*
* @param msg Inhalt der Protokollausgabe
* @see org.slf4j.Logger#error(String)
*/
public void info(String msg) {
logger.info(msg);
}
/**
*Debug-Ausgabe
*
* @param msg Inhalt der Protokollausgabe
* @see org.slf4j.Logger#error(String)
*/
public void debug(String msg) {
if (logger.isDebugEnabled())
logger.debug(msg);
}
}
log4j.properties
log4j.properties ist wie gewohnt. Stellen Sie es einfach so ein, dass es von der Klasse ausgegeben werden kann, die den erweiterten Logger implementiert.
log4j.properties
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.logger.org.apache.activemq=ERROR
log4j.logger.org.springframework.batch=DEBUG
log4j.logger.org.springframework.transaction=INFO
log4j.logger.jp.co.product.system.batch=INFO
log4j.logger.test.jdbc=DEBUG
# for debugging datasource initialization
# log4j.category.test.jdbc=DEBUG
Erstellen Sie einfach eine Instanz der erweiterten Logger-Klasse und verwenden Sie sie. Da es sich um eine Beispielquelle handelt, ist die Instanziierung kein Singleton ... (T & T)
ExampleItemWriter.java
package jp.co.product.system.batch.demo;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.item.ItemWriter;
import org.springframework.stereotype.Component;
import jp.co.product.system.common.SystemLogger;
/**
* Dummy {@link ItemWriter} which only logs data it receives.
*/
@Component("writer")
public class ExampleItemWriter implements ItemWriter<Object> {
//private static final Log log = LogFactory.getLog(SystemLoggerExampleItemWriter.class);
private static final SystemLogger log = new SystemLogger(ExampleItemWriter.class);
/**
* @see ItemWriter#write(java.util.List)
*/
public void write(List<? extends Object> data) throws Exception {
// log.info(data);
log.debug("debug" + data.toString());
log.info("Info" + data.toString());
log.error("error" + data.toString());
}
}
Validiert durch Spring Batch Zur Laufzeit wird ein slf4j-Fehler ausgegeben. Erfordert die Definition des slf4j-Moduls unter Bezugnahme auf die folgende Site Vernichte den mysteriösen SLF4J WARN mit GAE / J
pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
Recommended Posts