slf4j、log4j使用总结

来源:互联网 发布:易方平板 知乎 编辑:程序博客网 时间:2024/06/07 19:04
  • slf4j+log4j组合使用的pom依赖
  <dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-api</artifactId>    <version>1.7.21</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <version>1.7.21</version></dependency><dependency>    <groupId>log4j</groupId>    <artifactId>log4j</artifactId>    <version>1.2.17</version></dependency>
  • 主要元素
       log4j.rootLogger or log4j.rootCategory       log4j.logger.${appenderName}           org.apache.log4j.ConsoleAppender           org.apache.log4j.FileAppender           org.apache.log4j.DailyRollingFileAppender           org.apache.log4j.RollingFileAppender       log4j.appender.${appenderName}.layout           org.apache.log4j.SimpleLayout           org.apache.log4j.HTMLLayout           org.apache.log4j.xml.XMLLayout           org.apache.log4j.TTCCLayout           org.apache.log4j.PatternLayout(常用)       log4j.debug loglog日志输出       log4j.appender.${appenderName}.Threshold        log4j.appender.${appenderName}.layout.ConversionPattern        #%m——输出代码中指定的消息#%p——输出优先级,即DEBUG、INFO、WARN、ERROR、FATAL#%r——输出自应用启动到输出该log信息耗费的毫秒数#%c——输出所属的类目,通常就是所在类的全名#%t——输出产生该日志事件的线程名#%n——输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"#%d——输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式#比如:%d{yyy MMM dd HH:mm:ss},输出类似:#2015年7月21日 12:12:12,921#%l——输出日志事件的发生位置,包括类目名、发生的线程、以及在代码中的行数#%X{ip}: MDC。#%%: 输出一个"%"字符#%F: 输出日志消息产生时所在的文件名称#%L: 输出代码中的行号(%l已包含了行号)#此配置是PatternLayout对应的 其他的layout配置 会出现警告日志log4j.additivity.${appenderName} 设置父类输出
  • logger的继承

og4j.additivity 只是appender时过滤并不影响log4j的继承

log4j配置动态修改配置文件 PropertyConfigurator configure/configureAndWatch

log4j的MDC NDC,我们日志中心的上下文实现

slf4j的format

  • 应用程序中获取日志的初始化流程

  • 日志LogManager的加载

  • 日志属性的处理

  • 打印日志输出逻辑, 以debug为例

  • 核心类/接口
      ○ Logger对记录日志动作的抽象,它提供了记录不同级别日志的接口      ○ RootLogger在Log4J中,所有Logger实例组成一个单根的树状结构,没有父节点,其Level字段必须设值以防止其他Logger实例都没有设置Level值的情况      ○ LoggerRepository、Logger实例的容器 其实现类 Hierarchy      ○ Level 日志级别抽象      ○ LoggingEvent 日志信息      ○ Appender 输出      ○ Layout 输出的格式      ○ LogManager 将Configurator和LoggerRepository整合在一起
  • 核心类图

  • 扩展

自定义appender ,通过继承AppenderSkeleton

自定义layout,自定义Layout

  • 源码中使用的设计模式

1、适配器模式 logger的封装 Log4jLoggerAdapter

2、单例模式 StaticLoggerBinder

3、工厂模式 ILoggerFactory

4、外观模式 Logger

5、解释器模式 PatternLayout

6、空对象模式 NullAppender 很多时候对象为null也是正常的,但是这个null会导致使用过程中的空指针异常,因此需要使用的地方,在每次使用前都要判断下是否为null,然后再使用,使用空对象可以免去繁琐的判断

原创粉丝点击