作者:じ☆ve宝贝
发布时间:2018-05-21T14:25:13
现在很多框架使用log4j2作为日志框架,近期在jfinal项目使用es的jar包时,发现没有办法打印日志,故将jfinal日志框架改为log4j2
<properties>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.21</slf4j.version>
<log4j2.version>2.8.2</log4j2.version>
</properties>
<dependencies>
<!--添加SLF4J-JCL依赖,将对JCL的日志API调用转换为对SLF4J接口的调用 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- 桥接:告诉commons logging使用Log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- 桥接:告诉Java Util Logging使用Log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
</dependencies>
import com.jfinal.log.ILogFactory;
import com.jfinal.log.Log;
public class Slf4jLogFactory implements ILogFactory {
@Override
public Log getLog(Class<?> clazz) {
return new Slf4jLogger(clazz);
}
@Override
public Log getLog(String name) {
return new Slf4jLogger(name);
}
}
import org.slf4j.LoggerFactory;
import com.jfinal.log.Log;
public class Slf4jLogger extends Log {
private org.slf4j.Logger log;
Slf4jLogger(Class<?> clazz) {
log = LoggerFactory.getLogger(clazz);
}
Slf4jLogger(String name) {
log = LoggerFactory.getLogger(name);
}
public void info(String message) {
log.info(message);
}
public void info(String message, Throwable t) {
log.info(message, t);
}
public void debug(String message) {
log.debug(message);
}
public void debug(String message, Throwable t) {
log.debug(message, t);
}
public void warn(String message) {
log.warn(message);
}
public void warn(String message, Throwable t) {
log.warn(message, t);
}
public void error(String message) {
log.error(message);
}
public void error(String message, Throwable t) {
log.error(message, t);
}
public void fatal(String message) {
log.error(message);
}
public void fatal(String message, Throwable t) {
log.error(message, t);
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
public boolean isFatalEnabled() {
return log.isErrorEnabled();
}
}
在继承JFinalConfig的类中找到 configConstant方法
/**
* 配置常量
*/
public void configConstant(Constants me) {
me.setLogFactory(new Slf4jLogFactory());
// 加载少量必要配置,随后可用PropKit.get(...)获取值
PropKit.use("config.properties");
me.setDevMode(PropKit.getBoolean("devMode", false));
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
600s 刷新此配置
-->
<Configuration status="WARN" monitorInterval="600">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" ignoreExceptions="false">
<PatternLayout
pattern="%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n" />
</Console>
</Appenders>
<Loggers>
<logger name="org.mybatis" level="debug" additivity="true" />
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
这样配置完成后你的日志框架已经成功切换为log4j2了