SLF4J中文手册.doc_第1页
SLF4J中文手册.doc_第2页
SLF4J中文手册.doc_第3页
SLF4J中文手册.doc_第4页
SLF4J中文手册.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SLF4J 中文手册中文手册 SLF4J 即简单日志门面 Simple Logging Facade for Java 不是具体的日志解决方案 它只服务于各种各样的日志系统 按照官方的说法 SLF4J 是一个用于日志系统的简单 Facade 允许最终用户在部署其应用时使用其所希望的日志系统 实际上 SLF4J 所提供的核心 API 是一些接口以及一个 LoggerFactory 的工厂类 从 某种程度上 SLF4J 有点类似 JDBC 不过比 JDBC 更简单 在 JDBC 中 你需要指定驱动 程序 而在使用 SLF4J 的时候 不需要在代码中或配置文件中指定你打算使用那个具体的 日志系统 如同使用 JDBC 基本不用考虑具体数据库一样 SLF4J 提供了统一的记录日志 的接口 只要按照其提供的方法记录即可 最终日志的格式 记录级别 输出方式等通过 具体日志系统的配置来实现 因此可以在应用中灵活切换日志系统 典型的使用模式典型的使用模式 下面同样的代码展示了 SLF4J 的典型使用模式 注意第 15 行 占位符 的使用 更多详 细内容请查看 FAQ 中的问题 What is the fastest way of logging 1 import org slf4j Logger 2 import org slf4j LoggerFactory 3 4 public class Wombat 5 6 final Logger logger LoggerFactory getLogger Wombat class 7 Integer t 8 Integer oldT 9 10 public void setTemperature Integer temperature 11 12 oldT t 13 t temperature 14 15 logger debug Temperature set to Old temperature was t oldT 16 17 if temperature intValue 50 18 logger info Temperature has risen above 50 degrees 19 20 21 在部署阶段绑定某个日志框架在部署阶段绑定某个日志框架 前面提到过 SLF4J 支持多种日志框架 SLF4J 发行包中自带几个用于 SLF4J 绑定 的 jar 文件 每种绑定对应一种支持的日志框架 slf4j log4j12 1 7 2 jar 用于绑定 1 2版的 log4j 这是一个广泛使用的日志系统 当然你还要 把 log4j 包加到 classpath 中 slf4j jdk14 1 7 2 jar 用于绑定 java util logging 作为 JDK 1 4 的 logging slf4j nop 1 7 2 jar 用于绑定 NOP 不做任何操作 slf4j simple 1 7 2 jar 用于绑定 simple 的实现 所有的打印会响应到 System err 只有 INFO 或者更高的级别会被打印 这个绑定在小型应用中非常有用 slf4j jcl 1 7 2 jar 用于绑定 Jakarta Commons Logging 这个绑定会使得 SLF4J 的日 志功能委托 JCL 来完成 还有除了 SLF4J 项目以外提供的绑定包 例如 logback 本身就实现了 SLF4J Logback 的 ch qos logback classic Logger 类实直接实现了 SLF4J 的 org slf4j Logger 接口 因此 结合 logback 使用 SLF4J 节省很多内存和计算的开销 要切换日志系统 只需在 classpath 上替换 slf4j 的绑定则可 例如 你要从 java util logging 切换到 log4j 只需要把 slf4j jdk14 1 7 2 jar 替换为 slf4j log4j12 1 7 2 jar SLF4J 不依赖于任何的特殊类加载器 实际上 每个 SLF4J 绑定都是在编译阶段使用且指 定唯一一种日志框架 例如 slf4j log4j12 1 7 2 jar 绑定在编译阶段绑定使用 log4j 在你的 代码中 除了 slf4j api 1 7 2 jar 意外 你只能在 classpath 中加入一种绑定 不要添加超过 1 个绑定 下面是这张图解释了总体的思路 underlying 表示直接实现 SLF4J 的接口 adaptation 表示通过适配器实现 SLF4J 的接口 SLF4J 的接口和它的各种适配器是非常简单的 大多数熟悉 java 语言的开发人员能够在一 个小时内阅读和完全理解这些代码 因为 SLF4J 没有使用或者说没有直接访问类加载器 所以关于类加载器的知识不是必须的 因此 SLF4J 没有类加载器和内存泄露的问题 在 方面 common logging 就相形见拙了 有了简单明了的 SLF4J 接口和部署模型 对于一个新的日志系统 开发人员可以容易的开 发 SLF4J 的绑定 库库 广泛使用的一些组件会在他们的代码中使用 SLF4J 接口 这是以避免强制用户使用某一 种日志框架 因此 最终用户可以再部署阶段选择自己喜欢的日志框架并在 classpath 中加 入对应框架的 slf4j 绑定包 以后 还可以通过替换一个新的 slf4j 绑定来使用另一种日志 框架 这种方案被证明是简单且健壮的 在 1 6 0 版本中 如果在 classpath 中没有找到绑定 slf4j api 将会默认忽略所有打印请求 以前 则会因为缺少 org slf4j impl StaticLoggerBinder 类而抛出一个 NoClassDeFoundError 的错误 从 SLF4J 1 6 0 器 则会发出一个唯一一次警告信息 说明缺少绑定并且往后的所 有答应请求会被忽略 举个实例 Wombat 框架依赖于 SLF4J 日志功能 为了避免强制最 终用户使用某种日志框架 Wombat 的发布包中包含了 slf4j api jar 且不包含任何绑定包 即便用户在 classpath 上缺少任何 SLF4J 绑定包 Wombat 依然能工作 只有在用户决定开 启使用日志功能的时候 他才需要安装绑定某种日志框架的 SLF4J 绑定包 项目中的日志功能依赖项目中的日志功能依赖 请注意 任何可嵌入使用的组件例如库或者框架 都不应该声明某个 SLF4J 绑定的具体依 赖 只能声明依赖于 slf4j api 有关 SLF4j 在可嵌入组件中使用的在 FAQ 里有相关讨论 logging configuration dependency reduction and testing 基于 maven 的传递依赖规则 对于 一般 项目 非库或者框架 来说 声明日志功能的依 赖可以通过一条依赖声明完成 LOGBACK CLASSIC 如果你希望使用 logback classic 作为日志框架 你只需在 pom xml 文件中声明 ch qos logback logback classic 依赖 如下所示 此外 logback classic 1 0 7 jar 依赖会自动把 slf4j api 1 7 2 jar 加载到你的项目 不过明确的声明 slf4j api 1 7 2 jar 的依赖并没有错 也避免 MAVEN 默认的相关版本信息不如你所意 ch qos logback logback classic 1 0 7 LOG4J 如果你希望使用 log4j 作为日志框架 你只需在 pom xml 文件中声明 org slf4j slf4j log4j12 依赖 如下所示 此外 slf4j log4j12 1 7 2 jar 依赖会自 动把 slf4j api 1 7 2 jar 加载到你的项目 不过明确的声明 slf4j api 1 7 2 jar 的依赖并没有错 也避免 MAVEN 默认的相关版本信息不如你所意 org slf4j slf4j log4j12 1 7 2 JAVA UTIL LOGGING 如果你希望使用 java util logging 作为日志框架 你只需在 pom xml 文件中声明 org slf4j slf4j jdk14 依赖 如下所示 此外 slf4j jdk14 1 7 2 jar 依赖会自动把 slf4j api 1 7 2 jar 加载到你的项目 不过明确的声明 slf4j api 1 7 2 jar 的依赖并没有错 也避免 MAVEN 默认的相关版本信息不如你所意 org slf4j slf4j jdk14 1 7 2 二进制兼容性二进制兼容性 混用不同版本的 slf4j api jar 和 slf4j 绑定会导致问题 例如 你使用 slf4j api 1 7 2 jar 然 后你必须使用 slf4j simple 1 7 2 jar 假若你使用了 slf4j simple 1 5 5 jar 将不能正常工作 不过 从用户的角度来看 所有版本的 slf4j api 包都是兼容的 客户使用不通版本的 slf4j api N jar 将不会有任何问题 你只需要保证你的 slf4j 绑定包的版本要匹配 slf4j api 包 的版本即可 在初始化阶段 如果 SLF4J 检测到 slf4j api 和 slf4j 绑定包的版本冲突 将会发出一个警 告 通过通过 SLF4J 统一日志统一日志 很多时候 一个项目以来不同的组件 这些组件中依赖的日志 api 不是 SLF4J 的 一个项 目依赖 JCL common logging java util logging log4j 和 SLF4J 的组合是很普遍的 因此 通过一个方式来统一日志则显得很有吸引力 SLF4J 通过提供 JCL java util logging 和 log4j 的桥接来满足这种普遍使用 更详细的内容参考 Bridging legacy APIs 页面 线程映射表 线程映射表 Mapped Diagnostic Context MDC 本质上是日志框架维护的一个 map 在应用中提供键值对 这些值可以添加到日志消 息中 SLF4J 支持 MDC 如果具体的日志框架提供了 MDC 功能 那么 SLF4J 就会委托下面的日 志框架实现 MDC 功能 注意 现在只有 log4j 和 logback 提供 MDC 功能 如果具体的日 志框架不提供 如 java util logging 则 slf4j 将会存储 MDC 的数据 但是里面的信息需要 用户通过代码来获得 因此 作为一个 SLF4J 的用户 你可以利用已有 MDC 功能的 log4j 和 logback 但是不能 强制用户依赖具体的日志框架 更多关于 MDC 的信息 请查看 logback 指南中的 MDC 章节 行动纲要行动纲要 AdvantageDescription 在部署阶段选择具体的日志框架 通过在 classpath 加入日志框架对应的的 slf4j 绑定包 错误快速响应 基于 JVM 加载累的方式 会很快的执行日志 框架绑定验证 如果 SLF4J 不能再 classpath 找到一个绑定 则会发出一条警 告信息 接着后面的所有日志请求就没有具 体的操作 绑定流行的日志框架 SLF4J 支持流行的日志框架 包括 log4j java util logging Simple logging and NOP logback 本身实现了 SLF4j 桥接遗留的日志 API 通过 SLF4J 实现 JCL 如 jcl over slf4j jar 使得项目迁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论