业务场景
业务逻辑中:在业务逻辑中,你可以使用 Logback 记录与业务相关的信息、警告和错误。例如,在订单处理系统中,你可以使用日志记录跟踪订单的处理状态、记录异常情况,以及记录用户操作等。这有助于排查问题、监视业务流程和追踪应用程序行为。
异常处理中:在应用程序中的异常处理代码中,你可以使用 Logback 记录异常详细信息,包括异常堆栈跟踪。这有助于开发人员了解异常原因以及如何修复它们。
性能监控中:你可以使用 Logback 记录应用程序的性能数据,如响应时间、请求处理时间等。这些信息有助于监视应用程序的性能,以及识别可能的性能问题。
安全审计中:在涉及安全性的应用程序中,Logback 可用于记录用户登录、权限更改和其他关键操作。这些日志可用于审计和合规性检查。
调试中:在开发和测试阶段,Logback 是调试代码的有力工具。你可以在代码中插入调试信息,以便在需要时启用它们,并在调试时查看日志输出。
集成和监控中:在应用程序中,Logback 可以与监控和集成工具集成,以实时监视和分析日志数据。这有助于运维人员追踪应用程序的状态并及时采取行动。
异常处理和错误日志中:在应用程序出现错误或异常时,Logback 可以用于记录错误日志,包括错误消息、异常堆栈跟踪和错误码。这些错误日志对于故障排除和问题定位非常有帮助。
在实际应用中,你可以根据应用程序的要求和需求,在代码的适当位置插入 Logback 记录语句。要注意配置 Logback,以确定日志记录的级别和输出目标(如控制台、文件、数据库等)。
根据日志的不同用途,可以有不同的记录级别,如 DEBUG、INFO、WARN、ERROR 等。
业务过程
选择需要保存的日志信息
一、参考链接,设置logback.xml
logback日志管理工具超详细使用方法及示例_logback 日志示例-CSDN博客
添加配置
//class是自定义类MyConsoleAppender的实际地址
<appender name="dbAppender" class="com.xx.xx.xx.MyConsoleAppender">
<encoder>
<pattern>日志格式</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="dbAppender"/>
</root>
二、创建实体类和数据库连接
@TableName
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OperationLog implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String level;
private String taskNo;
private String exceptionMessage;
@TabelField(fill = FieldFill.INSERT)
private String createdBy;
@TabelField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private Date createdTime;
@TabelField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
@TabelField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private Date updatedBy;
}
三、选择需要的日志信息,放入BlockingQueue队列中
public class DataContext {
public static BlockingQueue<OperationLog> operationLogs = new LinkedBlockingQueue<>();
public class MyConsoleAppender extends ConsoleAppender<ILoggingEvent>{
@Override
protected void append(ILoggingEvent loggingEvent) {
try{
if (null != loggingEvent.getArgumentArray() && (loggingEvent.getArgumentArray()[0]) instanceof OperationLog) {
OperationLog operationLog = ((OperationLog)loggingEvent.getArgumentArray()[0]);
//设置或者修改参数,然后放入队列等待消费
DataContext.operationLogs.add(operationLog);
}
} catch (Exception ex) {
}
}
}
四、设置定时任务获取日志消费
@EnableScheduling
@Configuration
public class LogTask {
@Scheduled(fixedDelay = 5 * 1000)
public void log() {
try {
OperationLog log;
while (null != (log = DataContext.operationLogs.poll())) {
//脱敏处理,保存日志到数据库
}
} catch (Exception ex) {
}
}
}