业务场景
- 业务逻辑中:在业务逻辑中,你可以使用 Logback 记录与业务相关的信息、警告和错误。例如,在订单处理系统中,你可以使用日志记录跟踪订单的处理状态、记录异常情况,以及记录用户操作等。这有助于排查问题、监视业务流程和追踪应用程序行为。
- 异常处理中:在应用程序中的异常处理代码中,你可以使用 Logback 记录异常详细信息,包括异常堆栈跟踪。这有助于开发人员了解异常原因以及如何修复它们。
- 性能监控中:你可以使用 Logback 记录应用程序的性能数据,如响应时间、请求处理时间等。这些信息有助于监视应用程序的性能,以及识别可能的性能问题。
- 安全审计中:在涉及安全性的应用程序中,Logback 可用于记录用户登录、权限更改和其他关键操作。这些日志可用于审计和合规性检查。
- 调试中:在开发和测试阶段,Logback 是调试代码的有力工具。你可以在代码中插入调试信息,以便在需要时启用它们,并在调试时查看日志输出。
- 集成和监控中:在应用程序中,Logback 可以与监控和集成工具集成,以实时监视和分析日志数据。这有助于运维人员追踪应用程序的状态并及时采取行动。
- 异常处理和错误日志中:在应用程序出现错误或异常时,Logback 可以用于记录错误日志,包括错误消息、异常堆栈跟踪和错误码。这些错误日志对于故障排除和问题定位非常有帮助。
在实际应用中,你可以根据应用程序的要求和需求,在代码的适当位置插入 Logback 记录语句。要注意配置 Logback,以确定日志记录的级别和输出目标(如控制台、文件、数据库等)。根据日志的不同用途,可以有不同的记录级别,如 DEBUG、INFO、WARN、ERROR 等。
第一种方式
导入依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
创建配置文件:
只打印在控制台
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置根节点
scan:设置为true时,如果配置文件发生了改变,将会自动重新加载,默认值为true;
scanPeriod:设置检测配置文件是否发生改变的间隔时间,默认是1分钟。如果没有指定单位,那么默认单位就是毫秒;
debug:设置为true时,将打印出logback内部的日志,用于查看logback运行状态。默认值为false-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- appender节点用于设置日志的输出目的地,可以输出到控制台、文件、数据库等 -->
<!-- name属性指定appender的别名,class指定输出目标的具体实现类,例如:ConsoleAppender是用于输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- pattern指定日志的输出格式
%d:指定日志输出的日期格式
%t:当前输出日志的线程名称
%p:日志的级别
%C:输出日志所在的类的完整类名
%m:日志内容
%n:换行符
-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- 设置日志输出的根,并指定日志的级别。
日志输出级别从小到大顺序:trace < debug < info < warn < error
例如:当level设置为info时,那么小于info级别的日志将不被输出-->
<root level="info">
<!-- 引用上面配置的appender的name -->
<appender-ref ref="console"/>
</root>
</configuration>
打印到控制台并且保存到一个文件中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- 指定日志输出类型,FileAppender用于输出到文件-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!-- 指定日志文件保存的路径,可以是相对路径,也可以是绝对路径;如果目录不存在则会自动创建 -->
<file>ch02/log/test.log</file>
<!-- append设置为true表示日志追加到文件末尾,如果为false则每次输出会先清空原有的内容再写入新日志-->
<append>true</append>
<!-- 日志输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<root level="info">
<!-- 引用上面的console appender -->
<appender-ref ref="console"/>
<!-- 引用上面的file appender -->
<appender-ref ref="file"/>
</root>
</configuration>
滚动日志:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 使用滚动日志,每天生成一个日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置滚动策略, TimeBasedRollingPolicy是最常用的滚动策略,它可以根据时间来定制生成不同的日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 指定滚动深层的文件名(以日期作为文件名) -->
<fileNamePattern>ch03/log/%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 决定保留归档日志的最大数量, 这里设置为30表示只保留最近30天的日志文件-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 日志输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="file"/>
</root>
</configuration>
输出到数据库中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 将日志输出到数据库中 -->
<appender name="mysql" class="ch.qos.logback.classic.db.DBAppender">
<!-- 配置数据源-->
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<!-- 这里使用alibaba的druid连接池作为数据源 -->
<dataSource class="com.alibaba.druid.pool.DruidDataSource">
<driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
<url>jdbc:mysql://localhost:3306/logback?useSSL=true&useUnicode=true&characterEncoding=utf-8</url>
<username>root</username>
<password>root</password>
</dataSource>
</connectionSource>
</appender>
<root level="info">
<appender-ref ref="mysql"/>
</root>
</configuration>
第二种方式
使用注解
导入依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
控制台输出:
@Slf4j
public class Main {
public static void main(String[] args) {
log.info("Log message...");
}
}