目录
简单介绍下几大日志框架之间的关系
Log4j:这是最早的日志框架之一。
Logback:这是log4j的升级版。
Log4j2:最新推出的日志框架。
Slf4j:日志门面,为各种日志框架提供统一的记录日志的接口。
接下来主要讲一下Logback的实现
依赖
spring-boot-dependencies 包含了 SLF4J,日志框架 Logback 的依赖,因此在使用 Spring Boot 项目时,SLF4J , Logback是自动包含的。
XML
<!-- SpringBoot 依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
配置
在 Logback 配置文件中(如 resources/logback.xml)进行自定义配置,以满足日志需求。
Logback 配置文件的部分能力:
1. 日志级别:可以设置全局日志级别,例如 DEBUG、INFO、WARN 或 ERROR。
2. 日志输出格式:可以定义日志消息的输出格式,包括日期时间格式、日志级别、线程名、消息内容等。
3. 日志输出目的地:可以配置将日志输出到控制台、文件、数据库、网络等。
4. 滚动策略:对于文件输出,可以配置滚动策略,例如按大小滚动或按时间滚动。
5. 异步日志:可以提高日志输出的性能,通过异步方式记录日志。
6. 日志过滤:可以定义过滤规则,例如只记录特定级别的日志或只记录包含特定关键字的日志。
7. 附加配置:可以配置其他高级功能,例如使用多个日志上下文、集成第三方库等。
Logback 日志框架中的部分类介绍:
ch.qos.logback.core.rolling.RollingFileAppender 是 Logback 日志框架中的一个类,它用于将日志消息追加到一个滚动文件中。当文件达到一定大小时,它会自动滚动,创建一个新的日志文件,同时保留旧的日志文件以便后续查看。
ch.qos.logback.core.rolling.TimeBasedRollingPolicy 是 Logback 日志框架中的一个滚动策略类,用于按时间滚动日志文件。
ch.qos.logback.classic.filter.LevelFilter 是 Logback 日志框架中的一个过滤器类,用于根据日志事件的级别来决定是否将该事件传递给后续的日志处理组件。
ch.qos.logback.core.ConsoleAppender 是 Logback 日志框架中的一个类,用于将日志消息输出到控制台。
参考以下配置:
XML
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<!-- 日志输出格式 -->
<property name="logPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 日志存放路径 -->
<property name="logPath" value="logs/bibo" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 INFO -->
<appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 90天 -->
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统日志输出 ERROR -->
<appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 90天 -->
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 一些第三方包的日志过滤级别 -->
<logger name="org.springframework" level="warn" />
<logger name="org.apache" level="WARN" />
<!--系统操作日志总体输出级别-->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILEINFO" />
<appender-ref ref="FILEERROR" />
</root>
</configuration>
实现
为某个具体的类创建一个名为logger的静态日志记录器对象,并且这个对象在初始化后不能再被修改。在后续的代码中,可以使用这个logger对象来进行日志记录。
java
private final static Logger logger = LoggerFactory.getLogger(SysLoginService.class);
logger常用记录日志级别:
1. DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
2. INFO:记录一般信息,这些信息可以帮助开发人员了解应用程序的运行情况。
3. WARN:记录警告信息,这些信息可能会导致潜在的问题,但不会影响应用程序的正常运行。
4. ERROR:指出虽然发生错误事件或者异常捕获,但不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
java
logger.info("账号密码尝试登录:{}, IP: {}", username, IpUtils.getIpAddr(ServletUtils.getRequest()));
try {
logger.debug("res: {}", res);
} catch (Exception e) {
logger.warn("error", e);
logger.error(e.getMessage(), e);
logger.error("Bad get request:{}", newUrl);
}