log4j统一记录短信操作日志(入库)

2024-01-25 10:49:28 浏览数 (2)

1、log4j.properties配置:

代码语言:javascript复制
#指定需要收集的短信操作工具类,同时log级别为warn
log4j.logger.com.xxx.util.CUSMSUtils=warn, sqlD
log4j.appender.sqlD=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.sqlD.driver=com.mysql.jdbc.Driver
#指定需要入库的数据库
log4j.appender.sqlD.URL=jdbc:mysql://127.0.0.1:3306/mytest?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
log4j.appender.sqlD.user=root
log4j.appender.sqlD.password=root
#入库sql
log4j.appender.sqlD.sql=insert into t_cusms_logs (create_time,mobile, content, log, status) VALUES ('%d{yyyy-MM-dd hh:mm:ss}', '%X{mobile}', '%X{content}', '%X{log}', '%X{status}')
log4j.appender.sqlD.layout=org.apache.log4j.PatternLayout

2、CUSMSUtils发送短信方法:

代码语言:javascript复制
MDC.put("mobile", mobile);   //手机号
MDC.put("content", content);  //短信内容
MDC.put("log", result);  //短信回执
MDC.put("status", "success");  //状态
logger.warn("短信发送回执:"   result); 

这里MDC种的key需要与sql中的占位名称一致。

完成。

介绍一下MDC:

    MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。某些应用程序采用多线程的方式来处理多个用户的请求。在一个用户的使用过程中,可能有多个不同的线程来进行处理。典型的例子是 Web 应用服务器。当用户访问某个页面时,应用服务器可能会创建一个新的线程来处理该请求,也可能从线程池中复用已有的线程。在一个用户的会话存续期间,可能有多个线程处理过该用户的请求。这使得比较难以区分不同用户所对应的日志。当需要追踪某个用户在系统中的相关日志记录时,就会变得很麻烦。     MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。对于一个 Web 应用来说,通常是在请求被处理的最开始保存这些数据。

0 人点赞