log4j logback slf4j区别?
首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样的呢?SLF4J,即简单日志门面(Simple Logging Facade for JAVA),不是具体的日志解决方案,它只服务于各种各样的日志系统。一般来说,slf4j配合log4j、logback进行使用,可以理解为slf4j是标准,log4j和logback是实现,我们可以根据自己的需求进行选择具体的日志系统。
这里推荐使用logback,因为logback更快的执行速度,logback-classic 非常自然的实现了SLF4J,官方也推荐使用logback作为日志系统。
让我们开始使用 logback 吧!
一、不需要引入依赖
为什么不需要引入依赖呢?因为 SpringBoot 的核心依赖里已经包含了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
使用 IDEA 选定指定依赖,然后选择查看图表,像这样
进去之后,点击放大镜按钮,放大,找到 spring-boot-starter,我们可以看到下图。已经引入了常见的日志依赖,也包括 logback
二、自定义 logback 配置文件
在 resource 根目录新建 logback-spring.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration debug="false">
- <contextName>Logback For demo Mobile</contextName>
- <!-- 设置log日志存放地址 -->
- <!--(改) 单环境设置 -->
- <!--<property name="LOG_HOME" value="/Users/liuyanzhao/Desktop/temp/log" />-->
- <!-- 多环境设置 -->
- <springProfile name="dev">
- <property name="LOG_HOME" value="/Users/liuyanzhao/Desktop/temp/log" />
- </springProfile>
- <springProfile name="prod">
- <property name="LOG_HOME" value="/logger/log" />
- </springProfile>
- <!-- 控制台输出 -->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder默认配置为PartternLayoutEncoder -->
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%n</pattern>
- </encoder>
- <target>System.out</target>
- </appender>
- <!-- 按照每天生成日志文件 -->
- <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
- <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</FileNamePattern>
- <!--日志文件保留天数 -->
- <MaxHistory>180</MaxHistory>
- </rollingPolicy>
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
- </encoder>
- <!--日志文件最大的大小 -->
- <triggeringPolicy
- class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>20MB</MaxFileSize>
- </triggeringPolicy>
- </appender>
- <!-- (改)过滤器,可以指定哪些包,哪个记录到等级, -->
- <!-- 运用的场景比如,你只需要com.demo.controller包下的error日志输出。定义好name="com.demo.controller" level="ERROR" 就行了 -->
- <logger name="com" level="ERROR">
- <appender-ref ref="ROLLING_FILE" />
- </logger>
- <!-- 全局,控制台遇到INFO及以上级别就进行输出 -->
- <root level="INFO">
- <appender-ref ref="STDOUT" />
- </root>
- </configuration>
因为博主的项目中使用了多环境配置,就是 resource 目录下有
application.properties,application-dev.properties,application-prod.properties 三个文件
applocation.properties 配置如下
spring.profiles.active=dev
然后其他配置写在 application-dev.properties 里
三、开始使用
导入包
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
获得实例
- private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
直接使用
- logger.error("参数验证失败",);
这是一个例子,统一异常管理的一部分
- package com.liuyanzhao.forum.exception;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- /**
- * 全局异常捕获
- * @author 言曌
- * @date 2018/3/20 下午12:57
- */
- @ControllerAdvice
- public class GlobalExceptionHandler {
- // 日志记录工具
- private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
- //错误显示页面
- public static final String viewName = "/error/error";
- @ExceptionHandler(value = Exception.class)
- public String defaultErrorHandler(Exception e, Model model) {
- logger.error("Exception", e);
- String message = e.getMessage();
- model.addAttribute("message", message);
- model.addAttribute("code", 500);
- return viewName;
- }
- }
四、查看效果
无需其他配置,新建了 logback-spring.xml 文件,Spring 容器会自动加载。
启动项目,然后进行一些试验
可以看到在我设置的目录下新建了一个 2018-3-24.log 文件,里面有 ERROR 层的异常信息
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏