为什么记录器名称打印不正确的类名称以及如何自定义它。?

问题描述 投票:0回答:1

这是我的 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 名称自定义为正确的类名称。?

  • 谢谢
java log4j cxf slf4j jakarta-migration
1个回答
0
投票

您可能需要使用 %c 而不是 %c{2},因为此模式仅显示记录器名称的最后 2 个元素。

更改后,将显示完整的类名,例如 com.example.EmployeeAPIImpl

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.