关键词:
1. 简介
1.1 SLF4J概述
SLF4J 代表 Simple Logging Facade for Java。相当于一个门面,提供了 Java 中所有日志框架的简单抽象。
- 使用 SLF4J 框架,可以在部署时,迁移到所需的日志记录框架(如 Log4j, JUL, Simple logging,NOP等)
- SLF4J 支持参数化日志记录消息
- SLF4J提供了一个简单的Java工具,称为迁移器。
日志严重程度:
序号 | 严重程度 | 描述 |
---|---|---|
1 | Fatal | 导致应用程序终止的严重问题 |
2 | ERROR | 运行时错误 |
3 | WARNING | 大多数情况下,这种级别的错误是由于使用了已弃用的API |
4 | INFO | 运行时发生的事件 |
5 | DEBUG | 有关系统流程的信息 |
6 | TRACE | 有关系统流程的更多详细信息 |
SLF4J 和 Log4j的关系:
1.2 Logback概述
Logback 分为三个不同的模块,logback-core
(核心代码模块),logback-classic
(log4j的一个改良版本,同时实现了slf4j
的接口,这样如果之后要切换其他日志组件也是一件很容易的事),logback-access
(访问模块与Servlet容器集成提供通过Http来访问日志的功能)
Logger
和 LoggerFactory
是 SLF4J包中的类 , LoggerContext
的作用是获得内部状态信息
logback在启动的时候,会按照下面的顺序加载配置文件(只要获取到配置之后就不再继续获取了)
- 如果Java程序启动时指定了
logback.configurationFile
属性,就用该属性指定的配置文件。- 如
java -D logback.configurationFile=/path/myLogback.xml Test
,这样执行Test类的时候就会加载/path/myLogback.xml配置
- 如
- 在classpath(resources目录下)中查找 logback.groovy 文件
- 在classpath中查找 logback-test.xml 文件
- 在classpath中查找
logback.xml
文件 - 如果是 JDK6+,那么会调用ServiceLoader 查找 com.qos.logback.classic.spi.Configurator接口的第一个实现类
- 自动使用 ch.qos.logback.classic.BasicConfigurator 在控制台输出日志
2. 项目中进行使用
使用 Maven进行快速开发
2.1 导入依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version> <!-- 请根据情况选择合适的版本 -->
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version> <!-- 请根据情况选择合适的版本 -->
</dependency>
2.2 在resources目录下添加logback.xml
示例文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--
debug(默认false):要不要打印 logback内部日志信息
scan(默认true):配置发生改变时,要不要重新加载
scanPeriod(默认1 seconds):检测配置发生变化的时间间隔。如果没给出时间单位,默认时间单位是毫秒
-->
<configuration debug="true" scan="true" scanPeriod="1 minutes">
<!-- 日志存放路径 -->
<property name="log.path" value="./logs" />
<!-- 控制台输出 -->
<!-- 日志输出格式 -->
<property name="console.pattern" value="%dHH:mm:ss.SSS [%thread] %-5level %logger20 - [%method,%line] - %msg%n" /> <!--定义参数,后面可以通过$console.pattern使用-->
<!--ConsoleAppender 用于在屏幕上输出日志-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<!--定义控制台输出格式-->
<encoder>
<pattern>$console.pattern</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<!-- 日志输出格式 -->
<property name="log.pattern" value="%dHH:mm:ss.SSS [%thread] %-5level %logger20 - [%method,%line] - %msg%n" />
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>$log.path/sys-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>$log.path/sys-info.%dyyyy-MM-dd.log</fileNamePattern>
<!-- 日志最大的历史 30天 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>$log.pattern</pattern>
</encoder>
<!-- 定义了一个过滤器,在level之下的日志输出不会被打印出来 -->
<!-- 这里定义了INFO,也就是控制台不会输出比INFO级别小的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>$log.path/sys-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>$log.path/sys-error.%dyyyy-MM-dd.log</fileNamePattern>
<!-- 日志最大的历史 40天 -->
<maxHistory>40</maxHistory>
</rollingPolicy>
<encoder>
<pattern>$log.pattern</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<!--对于类路径以 com.xxxx 开头的Logger,输出级别设置为debug,并且只输出到控制台-->
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
<logger name="com.lwclick" level="debug" /> <!-- 需要根据自己的包名进行修改 -->
<!--root是默认的logger 这里设定输出级别是info-->
<root level="info">
<!-- 引用了一个appender,日志会往这个appender里面写 -->
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
2.3 代码中使用
public class Main
static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
logger.info("", "测试信息");
在 SLF4J/Logback 中使用标记的最佳实践
】在SLF4J/Logback中使用标记的最佳实践【英文标题】:BestpracticesforusingMarkersinSLF4J/Logback【发布时间】:2011-05-0902:39:14【问题描述】:我们在项目中使用SLF4J+Logback组合已有一段时间了,对此非常满意,但我们的日志记录策略相当简... 查看详情
slf4j和logback(代码片段)
问题:由于项目需要,今天弄了很久,SLF4J和Logback 一、SLF4J和Logback和CommonsLogging和Log4j的区别以及在普通的java项目中使用:SLF4J和CommonsLogging类似,充当日志API,Logback和Log4j类似,充当其实现类,为什么有了CommonsLogging和Log4j,又... 查看详情
springboot中logback与slf4j冲突排坑
...okeeper作为服务治理,导致在用Junit进行单元测试时出现了logback与slf4j冲突的问题。springboot使用logback打印日志,我们的项目正好用了这一点,所以解决办法是排除掉zookeeper中slf4j的依赖 查看详情
使用slf4j和logback(一:基本使用)
1.SLF4J是什么?slf4j是一个日志门面,它不是具体的日志实现框架,而是提供了通用的日志接口,按个人理解来说,是通过接口实现多态,来满足应用在不同日志框架间切换的需求。例如在程序中我们需要记录日志,使用SLF4J... 查看详情
logback源码分析(代码片段)
...ortorg.slf4j.LoggerFactory;//省略...Loggerlogger=LoggerFactory.getLogger(LogbackTest.class);logger.info("isbestplayerinworld","Greizmann");本文以Logback日志框架来分析以上代码的实现。slf4j如今日志框架常用的有log4j、log4j2、jul(common-log)以及logba... 查看详情
从源码来理解slf4j的绑定,以及logback对配置文件的加载(代码片段)
...om/youzhibing/p/6849843.html 编译期间,完成slf4j的绑定已经logback配置文件的加载。slf4j会在classpath中寻找org/slf4j/impl/StaticLoggerBinder.class(会在具体的日志框架如log4j、logback等中存在),找到并完成绑定;同时,logback也会在classpath中寻... 查看详情
项目存在多个logback配置
以下两个是我在使用slf4j+logback时候日志提示的问题,问题不大,都是WARN,并不真正影响运行,但是结果可能不是你希望的结果。<1>SLF4J:Foundbindingin[jar:file:/servers/storm-0.9.0.1/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.cla... 查看详情
log4j+slf4j管理日志项目迁移logback+slf4j
...理要转换成logbacak的日志管理。介于之前并未深究log4j和logback日志,所以做起来也很是头疼,不得不查询资料问别人,才勉强完成,所以记录一下从头的步骤,以供别人参考,有不对地方还请大神斧正。首先提供一下log4j和slf4j以... 查看详情
logback,slf4j,log4j2。了解它们并学习如何使用。(翻译)(代码片段)
...此已经编写了各种框架。一些Java日志记录框架包括Log4j,logback,Apache通用日志记录,java.util.Logger等。所有这些日志记录器都将日志记录到文件或其他指定的介质中。什么是SLF4JSLF4j代表Java的简单日志记录外观。顾名思义,它是... 查看详情
logback最佳实践
参考技术ALogback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core,logback-classic和logback-access。Logback是要与SLF4J结合起来。这两个组件的官方网站如下:logback官方网站:logback官方网站SLF4J官方网站:SLF4J官方... 查看详情
springboot学习
...层是spring框架,spring框架默认使用JCL;springboot选用SLF4j和logback;2、SLF4j使用1、如何在系统中使用SLF4j以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;应该给系统里面导入... 查看详情
slf4j和logback日志框架详解(代码片段)
SLF4J和Logback日志框架详解作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs本文讲述SLF4J和Logback日志框架。 SLF4J是一套简单的日志外观模式的JavaAPI,帮助在项目部署时对接各种日志实现。LogBack在运行时... 查看详情
log4j/log4j2/logback混用问题
...了解标题提到的几个日志框架,建议了解一下log4j/log4j2/logback简单使用说明,本节中pom依赖前面的内容;log4jdemolog4j2demologbackdemologdemojava项目一般会选择一种日志框架,但很难保证当前项目依赖的三方组件会选用和当前项目相同... 查看详情
如何在单个项目中使用多个配置和 logback?
】如何在单个项目中使用多个配置和logback?【英文标题】:Howtousemultipleconfigurationswithlogbackinasingleproject?【发布时间】:2011-10-0516:27:27【问题描述】:logback的配置文件在类路径中找到,因此是Eclipse-project-specific,这不是我想要的... 查看详情
springboot应用日志
...用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志。SLF4J与Logback简介SLF4J——SimpleLoggingFacadeForJava,它是一个针 查看详情
SLF4J + Logback 不登录 WildFly
】SLF4J+Logback不登录WildFly【英文标题】:SLF4J+LogbackdoesnotloginWildFly【发布时间】:2014-05-2913:23:37【问题描述】:我在WildFly8中运行Web应用程序,但由于某种原因它没有记录。我将SLF4J与LOGBACK一起使用。日志文件是在部署时创建的,... 查看详情
jdk9的新特性:jvm的xlog
...出现的问题。在现代java项目中,我们使用log4j或者slf4j,Logback等日志记录框架来处理日志问题。JVM是java程序运行的基础,JVM中各种事件比如:GC,classloading,JPMS,heap,thread等等其实都可以有日志来记录。通过这些 查看详情
slf4j+logback实现日志输出和记录(代码片段)
一、SLF4J SLF4J,即简单日志门面(SimpleLoggingFacadeforJava),不是具体的日志解决方案,它只服务于各种各样的日志系统。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。 使用... 查看详情