slf4j-api、slf4j-log4j12、log4j之间关联转载

原创
小哥 3年前 (2022-11-11) 阅读数 59 #大杂烩

Content

Top

  1. 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:

  1. log4j:

import org.apache.log4j.Logger;

Logger logger= Logger.getLogger(xx.class);

  1. slf4j+log4j:(推荐)

import  org.slf4j.Logger;

import  org.slf4j.LoggerFactory;

Logger logger = LoggerFactory.getLogger(xx.class);

Top

2. slf4j-api、slf4j-log4j12、log4j

下图清楚地描述了它们之间的关系,例如,当系统采用时。log4j作为日志框架实现的调用关系:

  1. 首先,系统包含slf4j-api日志访问接口:编译时间slf4j-api中public final class LoggerFactor类中private final static void bind()方法将查找实现类绑定的特定日志,主要通过。StaticLoggerBinder.getSingleton()语句调用的。
  2. slf4j-log4j12是链接slf4j-api和log4j中间适配器:它实现slf4j-api中StaticLoggerBinder接口,以便在编译时绑定。slf4j-log4j12的getSingleton()方法。
  3. log4j特定的日志记录系统:slf4j-log4j12初始化Log4j达到最终日志的输出。

Top

  1. 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);

Top

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

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门