分类 log4j 下的文章

SLF4J、Log4j、日志框架众

1. SLF4J

简单日志门面(simple logging Facade for java, SLF4J)为各种日志框架提供了统一的接口封装,包括java.util.logging,、logback、以及Log4j等,使得最终用户能够在部署的时候灵活配置自己希望的Loging APIs实现。在应用开发中,需要统一按照SLF4J的API进行开发,在部署时,选择不同的日志系统包加入到JAVA CLASSPATH中,即可自动转换到不同的日志框架上。SLF4J隐藏了具体的转换、适配细节,将应用和具体日志框架解耦开来,如果在类路径中没有发现绑定的日志实现,SLF4J默认使用NOP实现。

1.1 Hello World

将slf4j-api-1.7.21.jar加入类路径,使用SLF4J API输出日志消息,具体代码:

Continue Reading...

配置&启动流程 of Log4j [2]

4. DOMConfigurator

DOMConfigurator具体和PropertyConfigurator整体比较类似,支持log4j从一个xml文件中读取并初始化配置。DOMConfigurator使用了javax.xml包下的一些工具类实现配置读取和解析,功能理解上认识PropertyConfigurator就好,两者主要是配置文件格式引起的解析流程区别。

Continue Reading...

配置&启动流程 of Log4j [1]

1. Log4j启动链路

  • 应用获取日志记录器,进而记录日志信息:
Logger logger = Logger.getLogger("demo.ab");
logger.info("I am a demo message.");
  • Logger获取日志记录器实现逻辑,具体调用LogManager.getLogger方法:
static public Logger getLogger(String name) {
  return LogManager.getLogger(name);
}
  • LogManager代理日志仓库logger repository相关的方法,获取Logger对象:
public static Logger getLogger(final String name) {
  return getLoggerRepository().getLogger(name);
}
  • LogManager的静态代码块,在类初始化时会启动并配置好整个log4j:

Continue Reading...

Logger of Log4j

1.Logger

Logger是log4j日志记录功能的总入口,除了上下文的配置操作,其他功能点都是通过此类完成。Logger继承自Category,而Category又实现了AppenderAttachable接口。可以认为Logger就是Category,但是已经不建议直接使用Category了,存在Category的目的是为了保证兼容性。

Logger有成员属性:

// 日志记录器的名字
protected String name;
// 类的全路径名,遮盖了Category中的FQCN
private static final String FQCN = Logger.class.getName();
// 关联的日志级别
volatile protected Level level;
// 日志记录器的父节点
volatile protected Category parent;
// 日志记录器关联的资源文件,用于国际化或本地化
protected ResourceBundle resourceBundle;
// 日志记录器所在的管理仓库LoggerRepository
protected LoggerRepository repository;
// AppenderAttachableImpl是AppenderAttachable的内置实现,用于组织多个Appender
AppenderAttachableImpl aai;
// 默认为true,表示子日志记录器继承祖先日志记录器关联的Appender
protected boolean additive = true;

Continue Reading...

Appender of Log4j [6]

其他Appender主要有:

  • LF5Appender
  • NTEventLogAppender
  • RewriteAppender
  • AsyncAppender

15.LF5Appender

LF5Appender是log4j提供的一个图形界面的日志消息查看、检索GUI工具,开发基于swing编程。LF5Appender同样是AppenderSkeleton的子类,requiresLayout返回false,不需要关联Layout。看代码是Contributed by ThoughtWorks Inc.下面截图包下面都是lf5相关的代码,如果有用java做界面的话,可以参考下怎么写swing。

Continue Reading...