我找到了解决问题的方法。
我在 Windows 上激活了 ntp 服务器。
在 gui 启动时,我得到了从远程 pc 到客户端的时间差。
NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(5000);
client.open();
InetAddress hostAddr = InetAddress.getByName(confFile.getIpAddresse());
TimeInfo info = client.getTime(hostAddr, 8110);
info.computeDetails(); // compute offset/delay if not already done
Long offsetValue = info.getOffset();
Long delayValue = info.getDelay();
String delay = (delayValue == null) ? "0" : delayValue.toString();
String offset = (offsetValue == null) ? "0" : offsetValue.toString();
System.out.println(" Roundtrip delay(ms)=" + delay + ", clock offset(ms)=" + offset);
// offset in ms
client.close();
StaticVariables.timeDifference = Long.parseLong(offset);
为了修改 log4j 日志记录的时间戳,我创建了一个自定义 RollingFileAppender:
public class CustomRollingFileAppender extends RollingFileAppender
{
@Override
protected void subAppend(LoggingEvent event)
{
LoggingEvent modifiedEvent = new LoggingEvent(event.getFQNOfLoggerClass(), event.getLogger(),
event.getTimeStamp() + StaticVariables.timeDifference, event.getLevel(), event.getMessage(), event.getThreadName(),
event.getThrowableInformation(), event.getNDC(), event.getLocationInformation(), event.getProperties());
super.subAppend(modifiedEvent);
}
}
在这个附加程序中,我添加了时差event.getTimeStamp() + StaticVariables.timeDifference。