怎样做 云知梦 网站 付费网站如何做一个公司网站
2026/4/18 12:21:33 网站建设 项目流程
怎样做 云知梦 网站 付费网站,如何做一个公司网站,wordpress加密功能,网站建设学习学校淘宝返利软件的日志审计系统#xff1a;Java LogbackELK Stack实现操作日志的可追溯与可视化分析 大家好#xff0c;我是 微赚淘客系统3.0 的研发者省赚客#xff01; 在淘宝返利类软件中#xff0c;用户提现、订单绑定、佣金结算等关键操作必须具备完整、不可篡改的日志记…淘宝返利软件的日志审计系统Java LogbackELK Stack实现操作日志的可追溯与可视化分析大家好我是 微赚淘客系统3.0 的研发者省赚客在淘宝返利类软件中用户提现、订单绑定、佣金结算等关键操作必须具备完整、不可篡改的日志记录以满足安全审计与问题回溯需求。我们基于 Java 技术栈采用 Logback 作为日志框架结合 ELKElasticsearch Logstash Kibana构建集中式日志审计系统实现结构化日志采集、存储与可视化分析。日志结构化设计首先定义统一的操作日志模型确保字段语义清晰packagejuwatech.cn.log.model;importcom.fasterxml.jackson.annotation.JsonFormat;importjava.time.LocalDateTime;publicclassAuditLog{privateStringtraceId;// 全链路追踪IDprivateStringuserId;// 操作用户IDprivateStringaction;// 操作类型如 WITHDRAW_SUBMITprivateStringresourceId;// 关联资源ID如订单号privateStringclientIp;// 客户端IPprivateStringuserAgent;// 客户端标识privateStringstatus;// SUCCESS/FAILprivateStringerrorMessage;// 错误详情可选JsonFormat(patternyyyy-MM-dd HH:mm:ss)privateLocalDateTimetimestamp;// 省略 getter/setter}Logback 配置输出 JSON 格式日志在logback-spring.xml中配置net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder将日志直接输出为 JSONconfigurationappendernameSTDOUTclassch.qos.logback.core.ConsoleAppenderencoderclassnet.logstash.logback.encoder.LoggingEventCompositeJsonEncoderproviderstimestamp/logLevel/loggerName/message/arguments/mdc/!-- 支持 MDC 注入 traceId、userId 等 --stackTrace//providers/encoder/appenderrootlevelINFOappender-refrefSTDOUT//root/configurationMDC 上下文注入关键字段在请求入口处通过拦截器注入用户ID、TraceID等信息到 MDCpackagejuwatech.cn.log.interceptor;importorg.slf4j.MDC;importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.UUID;ComponentpublicclassAuditLogInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler){StringtraceIdUUID.randomUUID().toString().replace(-,);StringuserIdrequest.getHeader(X-User-ID);// 由网关注入StringclientIpgetClientIp(request);MDC.put(traceId,traceId);MDC.put(userId,userId!null?userId:anonymous);MDC.put(clientIp,clientIp);MDC.put(userAgent,request.getHeader(User-Agent));returntrue;}privateStringgetClientIp(HttpServletRequestrequest){Stringiprequest.getHeader(X-Forwarded-For);if(ipnull||ip.isEmpty()){iprequest.getRemoteAddr();}returnip;}OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex){MDC.clear();}}注册拦截器packagejuwatech.cn.config;importjuwatech.cn.log.interceptor.AuditLogInterceptor;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(newAuditLogInterceptor()).addPathPatterns(/api/**);}}业务层记录审计日志在关键服务方法中记录结构化日志packagejuwatech.cn.service;importjuwatech.cn.log.model.AuditLog;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Service;ServicepublicclassWithdrawService{privatestaticfinalLoggerauditLoggerLoggerFactory.getLogger(AUDIT_LOG);privatefinalObjectMapperobjectMappernewObjectMapper();publicvoidsubmitWithdraw(StringuserId,StringorderId,doubleamount){try{// 执行提现逻辑processWithdraw(userId,orderId,amount);AuditLoglognewAuditLog();log.setAction(WITHDRAW_SUBMIT);log.setUserId(userId);log.setResourceId(orderId);log.setStatus(SUCCESS);log.setTimestamp(java.time.LocalDateTime.now());auditLogger.info(objectMapper.writeValueAsString(log));}catch(Exceptione){AuditLoglognewAuditLog();log.setAction(WITHDRAW_SUBMIT);log.setUserId(userId);log.setResourceId(orderId);log.setStatus(FAIL);log.setErrorMessage(e.getMessage());log.setTimestamp(java.time.LocalDateTime.now());auditLogger.warn(objectMapper.writeValueAsString(log));throwe;}}privatevoidprocessWithdraw(StringuserId,StringorderId,doubleamount){// 实际业务逻辑}}Logstash 配置解析与转发Logstash 配置文件logstash.conf如下从 Filebeat 或直接从 Docker 日志读取并写入 Elasticsearchinput { beats { port 5044 } } filter { json { source message target log } date { match [[log][timestamp], yyyy-MM-dd HH:mm:ss] target timestamp } } output { elasticsearch { hosts [http://elasticsearch.juwatech.cn:9200] index juwatech-audit-%{YYYY.MM.dd} } }Kibana 可视化看板在 Kibana 中创建索引模式juwatech-audit-*并基于以下字段构建看板按log.action统计操作分布按log.status监控失败率通过log.traceId追踪全链路设置告警规则当WITHDRAW_SUBMIT失败率 1% 时触发通知日志安全与合规所有审计日志禁止删除Elasticsearch 索引设置生命周期策略ILM保留180天并开启 HTTPS 与 Basic Auth 访问控制。同时敏感字段如手机号在业务层脱敏后再记录。本文著作权归 微赚淘客系统3.0 研发团队转载请注明出处

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询