Java日志-Slf4J
2015年11月10日
1 目标:使用统一的日志API操作日志,绑定不同的实现包完成实际的日志操作。
2 原理:slf4j.jar作为统一的api,调用其它的impl包作为底层实现。
3 流程:安装库,配置日志,输出日志
3.1 安装库:安装Slf4J的api库,安装Log4J2的Slf4j实现库,安装Log4J2的功能库,并添加到ClassPath。
3.1.1下载Slf4J,解压后将安装api库:
Slf4J的api库:slf4j-api-1.7.12.jar
3.1.2超载Log4J2,解压后安装实现库和功能库
log4J2的Slf4J实现库:log4j-slf4j-impl-2.4.1.jar
log4J2的功能库:log4j-api-2.4.1.jar,log4j-core-2.4.1.jar。
3.2 配置日志:使用Log4J2的配置方式。
可以省略,但会给出报错误警告。
3.3 输出日志:使用Slf4J的统一接口。
//Main.java
packagelee;
importorg.slf4j.Logger;
publicclass Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Logger logger =LoggerFactory.getLogger("root");
logger.error("this iserror");
logger.info("this isinfo.");
}
}
4 方法
只是调用方法使用slf4j,其它操作完全与log4j2相同。
参考:http://www.slf4j.org/manual.html
http://logging.apache.org/log4j/2.x/log4j-slf4j-impl/index.html
http://my.oschina.net/kenshiro/blog/185513
4.1 配置文件:log4j2的配置文件
4.2 输出日志:使用程序输出日志,与log4j2类似。
4.2.1日志管理对象:LogFactory,管理日志对象组织和其它选项。
4.2.2日志对象:Logger,控制日志的输出等。
示例:
Logger logger =LoggerFactory.getLogger("root");
logger.error("this iserror");
5 示例:输出控制台、文件,滚动文件日志。
//log4j2.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<Console name="console"target="SYSTEM_OUT">
<PatternLayout
pattern="msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd HH:mm:ss,SSS}%n" />
</Console>
<File name="log"fileName="target/test.log" append="true">
<PatternLayout
pattern="%d{DEFAULT}~%levelclass:%C line:%L method:%M - %m%xEx%n" />
</File>
<RollingFilename="dailyrolling" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd
HH:mm:ss,SSS}%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicysize="20 MB" />
</Policies>
<DefaultRolloverStrategymax="10" />
</RollingFile>
<Asyncname="asynclog">
<AppenderRefref="dailyrolling" />
</Async>
</appenders>
<loggers>
<root>
<appender-refref="console"></appender-ref>
</root>
<loggername="com.test.loggerxx" level="info"additivity="true">
<appender-refref="log"></appender-ref>
</logger>
<logger name="lee.log"additivity="false" level="all">
<appender-refref="asynclog"></appender-ref>
</logger>
</loggers>
</configuration>
//Main.java
packagelee;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
publicclass Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Logger logger =LoggerFactory.getLogger("root");
logger.error("this iserror");
logger.info("this isinfo.");
Logger myLogger =LoggerFactory.getLogger("com.test.loggerxx");
myLogger.error("myLogger:this iserror");
myLogger.info("myLogger:this isinfo.");
Logger leeLogger =LoggerFactory.getLogger("lee.log");
for (int i = 0; i < 1000000; ++i){
leeLogger.error("leeLogger:thisis error");
leeLogger.info("leeLogger:thisis info.");
}
}
}