slf4j-api、slf4j-log4j12、log4j之间关联转载
原创Content
-
slf4j-api
slf4j :Simple Logging Facade for Java,为java提供的简单日志Facade。Facade立面,下层是界面。它允许用户在项目中使用自己的首选项。slf4j访问不同的日志系统。
因此slf4j门户是许多界面的集合。它不负责特定的日志实现,只负责在编译时找到合适的日志系统进行绑定。具体接口均在中定义slf4j-api中。查看slf4j-api可以找到源代码,public final class LoggerFactory类之外是接口定义。因此slf4j-api本质是接口定义。
它只提供一个核心slf4j api(就是slf4j-api.jar包)这个包只有一个日志接口,尚未实现,因此如果您想使用它,您必须为它提供一个实现某些接口的日志包。 如:log4j,common logging,jdk log日志实现包等,但这些日志实现不能直接通过接口调用,它们完全相同slf4j-api不一致,因此slf4j已添加另一层以转换每个日志实体 使用现有软件包,如slf4j-log4j12等。
slf4j+log4j组合使用模式:
1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties(也可以是 log4j.xml)
日志类的具体用途API:
- log4j:
import org.apache.log4j.Logger;
Logger logger= Logger.getLogger(xx.class);
- slf4j+log4j:(推荐)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(xx.class);
2. slf4j-api、slf4j-log4j12、log4j
下图清楚地描述了它们之间的关系,例如,当系统采用时。log4j作为日志框架实现的调用关系:
- 首先,系统包含slf4j-api日志访问接口:编译时间slf4j-api中public final class LoggerFactor类中private final static void bind()方法将查找实现类绑定的特定日志,主要通过。StaticLoggerBinder.getSingleton()语句调用的。
- slf4j-log4j12是链接slf4j-api和log4j中间适配器:它实现slf4j-api中StaticLoggerBinder接口,以便在编译时绑定。slf4j-log4j12的getSingleton()方法。
- log4j特定的日志记录系统:slf4j-log4j12初始化Log4j达到最终日志的输出。
-
log4j
3.1 log4j的使用
(1)使用eclipse创建maven工程,在maven增加以下方面的依赖性:
1
2
3
4
5
6
7
8
9
10
11
12
13
// 一般创作作品,推荐slf4j设计一个易于扩展的日志系统。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>
1.7
.
22
</version>
</dependency>
// 可用于学习log4j,不建议在正式项目中使用,这取决于log4j日志系统。
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>
1.2
.
17
</version>
</dependency>
(2)src创建log4j.properties文件
log4j.properties内容如下:
1
2
3
4
5
6
7
# 级别、名称
log4j.rootLogger = debug, console
log4j.appender.console = org.apache.log4j.ConsoleAppender #日志输出到控制台
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%m%n # 日志格式
org.apache.log4j.App.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package
org.apache.log4j;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
/**
* Hello world!
*
*/
public
class
App {
private
static
final
Logger LOG = LoggerFactory.getLogger(App.
class
);
public
static
void
main(String[] args) {
LOG.info(
"info"
);
LOG.debug(
"debug"
);
LOG.error(
"error"
);
System.out.println(
"Hello World!"
);
}
}
运行后,结果如下:
3.2 log4j配置使用
Log4j由三个重要组成部分组成: 日志信息的优先级 , 日志信息的输出目标。 , 日志信息的输出格式 。
日志信息的优先级从高到低。ERROR、WARN、 INFO、DEBUG以指定该日志信息的重要性;
日志信息的输出目标。指定了日志将打印到控制台还是文件中;
输出格式控制日志信息的显示。
3.2.1 定义配置文件
您可以在代码中对其进行配置,而无需使用配置文件。Log4j环境但使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML文件的格式,一个是Java属性文件(键=值)。
(1)配置根Logger
log4j.rootLogger = level, appenderName, appenderName, …
其中, level 是记录的优先级OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,非常好。 第一级从高到低ERROR、WARN、INFO、DEBUG。
每个Logger都是日志级别(log level),用于控制日志信息的输出。日志级别从高到低分为:
- off 最高级别,用于关闭所有日志记录。
- fatal 指示每个严重错误事件都将导致应用程序退出。
- error 指示尽管发生了错误事件,但仍不会影响系统的继续运行。
- warm 指示潜在的错误情况。
- info 一般来说,在粗粒度级别,重点放在应用程序的整个运行上。
- debug 通常在细粒度级别使用,它对调试应用程序非常有用。
- all 最低级别,用于打开所有日志记录。
使用此处定义的级别,您可以控制切换到应用程序中相应级别的日志信息。例如,这里 义了INFO级别,然后全部在应用程序中。DEBUG不会打印液位日志信息。
appenderName 就是指level当输出级别的日志信息时,可以同时指定多个输出目标。
(2)配置日志信息输出目标Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下内容:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天生成一个日志文件)
- org.apache.log4j.RollingFileAppender(当文件大小达到指定大小时,将生成新文件)
- org.apache.log4j.WriterAppender(以流格式将日志信息发送到任何指定位置)
(3配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下内容:
- org.apache.log4j.HTMLLayout(以HTML表格布局)
- org.apache.log4j.PatternLayout(可灵活指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含有关日志生成时间、线程、类别等的信息)
log4J采用类似C语言中的printf函数的打印格式使用以下打印参数格式化日志信息: %m 输出代码中指定的消息
%p 输出优先级,即。DEBUG,INFO,WARN,ERROR,FATAL
%r 输出从应用程序开始到输出。log信息所用的毫秒数
%c 输出所属的类别,通常是类的全名。
%t 输出生成日志事件的线程名称。
%n 输出滑架返回行中断,Windows平台为“rn”,Unix平台为“n”
%d 默认格式的输出日志时间点的日期或时间。ISO8601,也可以在后面指定格式,例如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的位置,包括类别名称、发生的线程以及代码中的行数。示例:Testlog4.main(TestLog4.java:10)
实例:
3.2.2 在代码中使用log4j
(1)获取Logger
使用Log4j第一步是获取记录器,它将负责控制日志信息。其语法为:
public static Logger getLogger( String name)
通过指定的名称获取记录器,如有必要,为每个类创建一个新的记录器。Name通常使用该类的名称,例如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
(2)读取log4j.properties配置文件
获取记录器后,第二步将配置Log4j环境,其语法为:
1
2
3
BasicConfigurator.configure():自动快速使用默认值。Log4j环境
PropertyConfigurator.configure(String configFilename):读取使用property文件写入配置文件
DOMConfigurator.configure(String filename):读取XML配置文件格式
(3)记日志
1
2
3
4
Logger.debug(message);
Logger.info(message);
Logger.warn(message);
Logger.error(message);
x. 参考资料
http://logging.apache.org/log4j/1.2/manual.html
http://blog.csdn.net/chen3749102/article/details/52795786
http://blog.csdn.net/tanga842428/article/details/52924725
http://blog.csdn.net/sunny\_na/article/details/55212029
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除