openTCS配置log文件路径

运行debug plantoverview时会找不到log路径,报错:

 

Can't load log handler "java.util.logging.FileHandler"
java.nio.file.NoSuchFileException: .\log\opentcs-plantoverview.0.log.lck
java.nio.file.NoSuchFileException: .\log\opentcs-plantoverview.0.log.lck
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileSystemProvider.newFileChannel(WindowsFileSystemProvider.java:115)
    at java.nio.channels.FileChannel.open(FileChannel.java:287)
    at java.nio.channels.FileChannel.open(FileChannel.java:335)
    at java.util.logging.FileHandler.openFiles(FileHandler.java:478)
    at java.util.logging.FileHandler.<init>(FileHandler.java:281)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at java.util.logging.LogManager$5.run(LogManager.java:966)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:958)
    at java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:1578)
    at java.util.logging.LogManager.access$1500(LogManager.java:145)
    at java.util.logging.LogManager$RootLogger.accessCheckedHandlers(LogManager.java:1667)
    at java.util.logging.Logger.log(Logger.java:734)
    at java.util.logging.Logger.doLog(Logger.java:765)
    at java.util.logging.Logger.log(Logger.java:788)
    at java.util.logging.LoggingProxyImpl.log(LoggingProxyImpl.java:61)
    at sun.util.logging.LoggingSupport.log(LoggingSupport.java:120)
    at sun.util.logging.PlatformLogger$JavaLoggerProxy.doLog(PlatformLogger.java:610)
    at sun.util.logging.PlatformLogger.warning(PlatformLogger.java:319)
    at java.util.prefs.WindowsPreferences.<init>(WindowsPreferences.java:424)
    at java.util.prefs.WindowsPreferences.<clinit>(WindowsPreferences.java:91)
    at java.util.prefs.WindowsPreferencesFactory.userRoot(WindowsPreferencesFactory.java:42)
    at java.util.prefs.Preferences.userRoot(Preferences.java:454)
    at java.util.prefs.Preferences.userNodeForPackage(Preferences.java:368)
    at org.jhotdraw.util.prefs.PreferencesUtil.userNodeForPackage(PreferencesUtil.java:251)
    at org.jhotdraw.app.AbstractView.<init>(AbstractView.java:70)
    at org.opentcs.guing.application.OpenTCSView.<init>(OpenTCSView.java:414)
    at org.opentcs.guing.application.OpenTCSView$$FastClassByGuice$$c9557e69.newInstance(<generated>)
    at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:168)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:39)
    at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:42)
    at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:65)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
    at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
    at org.opentcs.guing.RunPlantOverview.main(RunPlantOverview.java:62)
[20200729-15:23:53-076] WARNING main                 j.u.prefs.WindowsPreferences.<init>()                  : Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
 

通过断点查看到当前目录是E:\OpenTCS\openTCS-4.18.0-src

默认的配置是

openTCS配置log文件路径

所以组合出来的完整路路径是,E:\OpenTCS\openTCS-4.18.0-src\.\log\opentcs-plantoverview.0.log.lck 这个是不存在的,所以报错了。

解决方法:

把logging.config配置改为

java.util.logging.FileHandler.pattern = openTCS-PlantOverview/build/install/openTCS-PlantOverview/loglog/opentcs-plantoverview.%g.log

就可以获取到正确的log路径。