业务场景


业务逻辑中:在业务逻辑中,你可以使用 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) {

        }
    }
}

日志里的敏感信息还在打明文?3 种日志脱敏方案任你选-CSDN博客

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐