Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将系统属性值用作记录器处理程序模式的一部分_Java_Logging_Java.util.logging - Fatal编程技术网

Java 如何将系统属性值用作记录器处理程序模式的一部分

Java 如何将系统属性值用作记录器处理程序模式的一部分,java,logging,java.util.logging,Java,Logging,Java.util.logging,我使用java.util.logging.logger作为我的应用程序的日志引擎。我想设置一个系统属性作为logging.properties文件中提到的处理程序模式值的一部分,如下所示 java.util.logging.FileHandler.pattern = path/${custom.home}/logs/server.log 我尝试设置上述值,但它没有解析custom.home属性,而是将其用作字符串,并在初始化处理程序时给出以下错误 Can't load log handler

我使用java.util.logging.logger作为我的应用程序的日志引擎。我想设置一个系统属性作为logging.properties文件中提到的处理程序模式值的一部分,如下所示

java.util.logging.FileHandler.pattern = path/${custom.home}/logs/server.log
我尝试设置上述值,但它没有解析custom.home属性,而是将其用作字符串,并在初始化处理程序时给出以下错误

Can't load log handler "java.util.logging.FileHandler"
java.nio.file.NoSuchFileException: path/${custom.home}/logs/server.log.lck
java.nio.file.NoSuchFileException: path/${custom.home}/logs/server.log.lck
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:177)
    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:459)
    at java.util.logging.FileHandler.<init>(FileHandler.java:263)
    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.getHandlers(Logger.java:1777)
    at java.util.logging.Logger.log(Logger.java:735)
    at java.util.logging.Logger.doLog(Logger.java:765)
    at java.util.logging.Logger.log(Logger.java:788)
无法加载日志处理程序“java.util.logging.FileHandler”
java.nio.file.NoSuchFileException:path/${custom.home}/logs/server.log.lck
java.nio.file.NoSuchFileException:path/${custom.home}/logs/server.log.lck
位于sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
位于sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
位于sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
位于sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:177)
位于java.nio.channels.FileChannel.open(FileChannel.java:287)
位于java.nio.channels.FileChannel.open(FileChannel.java:335)
位于java.util.logging.FileHandler.openFiles(FileHandler.java:459)
位于java.util.logging.FileHandler。(FileHandler.java:263)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于java.lang.Class.newInstance(Class.java:442)
在java.util.logging.LogManager$5.run(LogManager.java:966)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:958)
位于java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:1578)
在java.util.logging.LogManager.access$1500(LogManager.java:145)
位于java.util.logging.LogManager$RootLogger.accessCheckedHandlers(LogManager.java:1667)
位于java.util.logging.Logger.getHandlers(Logger.java:1777)
位于java.util.logging.Logger.log(Logger.java:735)
位于java.util.logging.Logger.doLog(Logger.java:765)
位于java.util.logging.Logger.log(Logger.java:788)
有没有办法达到这个要求

谢谢
Danesh

路径/${custom.home}/logs/server.log不存在! 使用:

相反。
但是eclipse说:“FileHander.pattern不可见!”

路径/${custom.home}/logs/server.log不存在! 使用:

相反。
但是eclipse说:“FileHander.pattern不可见!”

根据您的问题,我假设您已经手动设置了一个名为
custom\u home
的系统属性作为启动参数。然后,可以将子类化以识别新模式语法:

public class EnvFileHandler extends FileHandler {

    private static String pattern() throws IOException {
        String prefix = EnvFileHandler.class.getName();
        String v = LogManager.getLogManager().getProperty(prefix +".pattern");
        return v.replace("${custom_home}", System.getProperty("custom_home", "%hjava.log"));
    }

    public EnvFileHandler() throws IOException {
        super(pattern());
    }
}
然后使用logging.properties安装FileHandler子类,而不是安装FileHandler

.handlers=package.of.EnvFileHandler
package.of.EnvFileHandler.pattern=path/${custom_home}/logs/server.log

如果尚未设置此自定义属性,此代码示例将默认为主目录

根据您的问题,我假设您已手动将名为
custom\u home
的系统属性设置为启动参数。然后,可以将子类化以识别新模式语法:

public class EnvFileHandler extends FileHandler {

    private static String pattern() throws IOException {
        String prefix = EnvFileHandler.class.getName();
        String v = LogManager.getLogManager().getProperty(prefix +".pattern");
        return v.replace("${custom_home}", System.getProperty("custom_home", "%hjava.log"));
    }

    public EnvFileHandler() throws IOException {
        super(pattern());
    }
}
然后使用logging.properties安装FileHandler子类,而不是安装FileHandler

.handlers=package.of.EnvFileHandler
package.of.EnvFileHandler.pattern=path/${custom_home}/logs/server.log
如果尚未设置此自定义属性,此代码示例将默认为主目录

参考