在Ecology9中如果对日志进行改造输出如下。
[384384] [1b236fbd-6d25-4cc6-b097-d11f6946f247] [2024-06-11 10:27:09,782] INFO [Thread:resin-port-88-51] [com.huarise.rj.action.Demo.execute(Demo.java:98):execute] 执行demo对应的 requestid:384384,对应的tablename:formtable_main_123
1、日志文件修改
找到日志文件 \ecology\WEB-INF\log4jinit.properties,在日志文件末尾增加如下
可按照自己的方法定义名称
#rj log
#Sat Jun 10 08:12:26 GMT+08:00 2023
log4j.logger.rj=INFO,ERROR,rj
log4j.appender.rj=org.apache.log4j.DailyRollingFileAppender
log4j.appender.rj.DatePattern='_'yyyyMMdd'.log'
log4j.appender.rj.File=@rjlog/rj.log
# @rjlog 文件該配置相对文件生成的日志文件目录为 \WEAVER\ecology\log\rjlog\rj.log
log4j.appender.rj.layout=org.apache.log4j.PatternLayout
log4j.appender.rj.layout.ConversionPattern=[%X{REQUEST_ID}] [%X{TRACE_ID}] [%d{yyyy-MM-dd HH\:mm\:ss,SSS}] %-5p [Thread\:%t] [%l\:%M] %m%n
# true表示同步输出到ecology中,false表示不输出到该文件中,推荐不输出
log4j.additivity.rj=true
2、在代码中如何使用
1、直接使用方式:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger("rj");//使用上面你配置的日志自定义名称
//即可使用,对应日志文件会输出到指定的日志文件
logger.info(" this is rj LoggerFactory rj:"+request.getRequestid());
2、推荐自定义工厂类文件方式
package com.huarise.rj.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/***
*@ClassName LoggerFactoryUtil
*@Author rj
*@date 2024/6/8 9:29
*@version v1.0.0
*@Desc 指定日志输出文件内容 默认输出到 log/rjlog/rj.log 文件中,需配合调整日志文件 log4jInit.properties
*/
public class LoggerFactoryUtil {
private static final String loggerName = "rj";
public static Logger getLogger() {
return LoggerFactory.getLogger(loggerName);
}
public LoggerFactoryUtil(){
}
}
3、在代码中使用
public class Demo extends BaseBean implements Action {
private static final Logger logger = LoggerFactoryUtil.getLogger();
@Override
public String execute(RequestInfo request) {
logger.info(" this is rj LoggerFactory rj = requestid:{}",request.getRequestid());
...
}
}
4、显示结果
3、如果增加自定义标识日志追踪
该方法主要对实现流程节点后的动作代码有效,其它模块代码暂时未知,大家可自行摸索实现,原理都是类似的
1、实现效果
需要再配置文件log4jinit.properties中修改增加一个标识符,如下
2、自定义过滤器类
package com.huarise.rj.filter;
import org.apache.log4j.MDC;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.UUID;
/***
*@ClassName LogTraceIdFilter
*@Author rj
*@date 2024/6/8 11:31
*@version v1.0.0
*@Desc TODO
*/
public class LogTraceIdFilter implements Filter {
private static final String TRACE_ID = "TRACE_ID";
private static final String REQUEST_ID = "REQUEST_ID";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// String requestid = httpRequest.getParameter("requestid"); // 获取当前流程requestId
String traceId = UUID.randomUUID().toString(); //流程标识随机生成 UUID用于日志拦截
MDC.put(TRACE_ID, traceId);
// MDC.put(REQUEST_ID, requestid);
try {
chain.doFilter(request, response);
} finally {
MDC.remove(TRACE_ID);
// MDC.remove(REQUEST_ID);
}
}
@Override
public void destroy() {
}
}
3、配置文件
在配置文件 \WEAVER\ecology\WEB-INF\web.xml 增加该过滤器类
<!-- 配置自定义 Filter -->
<filter>
<filter-name>LogTraceIdFilter</filter-name>
<!-- 配置自定义 Filter 类的包名路径 大家替换自己的真实路径 -->
<filter-class>com.*.*.filter.LogTraceIdFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogTraceIdFilter</filter-name>
<!-- 配置自定义 Filter 要过滤的url路径,该路径可以是对应Action执行的方法路径,其它大家可以自动查询,
也可直接全部过滤,但是不推荐
/api/workflow/* 过滤流程节点后所有执行方法
-->
<url-pattern>/api/workflow/reqform/requestOperation</url-pattern>
</filter-mapping>
4、结果
完成上述代码操作后,记得重启服务,有时如果在服务运行期间修改配置文件可能不生效,记得在停止服务后操作