定义
slf4j:simple log facade for java。针对于java的简单日志门面(抽象),服务于各种日志框架(log4j,logback,log4j2等)。可以随意切换框架,而不会影响平台的日志。
jcl:java common logging。是apache提供的日志门面。
实用
1.建立logdemo项目
mvn archetype:generate -DgroupId=log.test.demo -DartifactId=logdemo
2.打开pom文件,增加slf4j的jar包。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
3.编写代码,打印日志。
package log.test.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Hello world!
*
*/
public class App
{
private static Logger logger = LoggerFactory.getLogger(App.class);
public static void main( String[] args )
{
System.out.println( "Hello World!" );
logger.info("Hello World!");
}
}
注:该提示为没有具体的绑定日志框架。
4.绑定具体的日志框架 slf4j-simple,简单实现日志打印功能。
# 增加slf4j-simple的包
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.26</version>
</dependency>
打印成功。
5.将日志框架改为log4j。只需要将slf4j对应的jar包替换掉即可。
- 增加依赖jar包
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.26</version>
<scope>test</scope>
</dependency>
- 增加log4j.properties文件
#log4j相关知识:
# log4j重要的构成组件:
# 1)日志的优先级 debug,info,warn,error,fatal。
# 2)日志信息的输出目的地。
# 3)日志输出信息的格式。
#基本种类,[level],appenderName,appenderName,...
#level对应日志的优先级
#appenderName,表示追加的目的地。可以同时输出多个目的地。
log4j.rootCategory=DEBUG,C,F
#控制台
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %p [%t] %C.%M(%L) | %m%n
#日志文件,每天创建一个新的日志。
log4j.appender.F=org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.File=D:\\bwbdworkspace-git/logs/logtest.log
log4j.appender.F.layout=org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %p [%t] %C.%M(%L) | %m%n
输出样式:
%p :输出日志信息的优先级,即debug、info、warn、error、fatal
%d :输出日志时间点(日期/时间),默认格式为ISO8601,也可以在其后指定格式如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r :输出自应用程序启动到输出该log信息耗费的毫秒数。
%t :输出产生该日志事件的线程名。
%l :输出日志事件发生的位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c :输出日志信息所属的类目,通常就是所在类的全名。
%M :输出产生日志信息的方法名。
%F :输出日志消息产生时所在的文件名称。
%L :输出代码中的行号。
%m :输出代码中指定的信息,如log(message)中的message。
%n :输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。
%x :输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%% :输出一个"%"字符。