这是我的 LogUtils 类的代码。我用它来格式化我的日志行。但它在那里打印了不正确的类名。怎么解决呢。?
import org.apache.commons.lang.StringUtils;
import org.apache.cxf.ext.logging.LoggingInInterceptor;
import org.apache.cxf.ext.logging.LoggingOutInterceptor;
import org.apache.cxf.ext.logging.event.LogEvent;
import org.apache.cxf.ext.logging.slf4j.Slf4jVerboseEventSender;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.slf4j.MDC;
public class LogUtils {
private static final String TRACK_ID = "TRACK_ID";
public static void setLogTrackingId(Object aLogTrackingId) {
MDC.put(TRACK_ID, String.valueOf(aLogTrackingId));
}
public static LoggingInInterceptor getLoggingInInterceptor() {
return new LoggingInInterceptor(getMsgSender()) {
@Override
public void handleMessage(Message message) throws Fault {
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
String logTrackingId = request.getHeader(Constants.SYS_USER_ID);
if (StringUtils.isNotBlank(logTrackingId)) {
setLogTrackingId(logTrackingId);
} else {
setLogTrackingId(String.valueOf(System.nanoTime()));
}
super.handleMessage(message);
}
};
}
private static Slf4jVerboseEventSender getMsgSender() {
return new Slf4jVerboseEventSender() {
@Override
protected String getLogMessage(LogEvent event) {
event.setAddress(event.getAddress());
event.setPayload(event.getPayload());
return super.getLogMessage(event);
}
};
}
}
所以我的控制台低于日志线。但是 EmployeeAPIImpl 不是预期的,但它也会在调用其他 API 类时打印。 (EG:当调用部门API或出勤API时)
01:943 INFO xyz123456789-01 EmployeeAPIImpl.REQ_IN [HRMService-UBUNTU_PC] [123123123123] REQ_IN
这是 log4j 上的记录器配置
log4j.appender.A1.layout.ConversionPattern=%d{ss:SSS} %-5p %t %c{2} [%X{hrModuleName}_%X{hrModuleId}] [%X{TRACK_ID}] %m %n
如何将 EmployeeAPIImpl 中的 Logger 名称自定义为正确的类名称。?
您可能需要使用 %c 而不是 %c{2},因为此模式仅显示记录器名称的最后 2 个元素。
更改后,将显示完整的类名,例如 com.example.EmployeeAPIImpl。
祝你好运!