2017-04-25 11 views
0

私のアプリケーションのログエンジンとしてjava.util.logging.loggerを使用しています。私は システムプロペリ値をロガーハンドラパターンの一部として使用する方法

java.util.logging.FileHandler.pattern = path/${custom.home}/logs/server.log 

は、私は上記の値を設定しようとした、以下のようにlogging.propertiesファイルに記載されているハンドラパターンの値の一部として、システムのプロパティを設定したいが、それはカスタムを解決しません。ホームプロパティを代わりに文字列として使用し、ハンドラを初期化する際に以下のエラーが発生する

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) 

この要件を達成する方法はありますか?

おかげ Danesh

+0

参照http://stackoverflow.com/questions/13066042/how-to-give-environmental-variable-path-for-file-appender-in-configuration-file –

答えて

1

パスpath/$ {} custom.home /logs/server.logのdoesntが存在します! 使用:

`java.util.logging.FileHandler.pattern = "path/"+`System.getProperty("user.home")+"/logs/server.log"; 

代わりに、 しかし、eclipseは言う: "FileHander.patternは見えない!"

0

あなたの質問から、起動引数としてcustom_homeというシステムプロパティを手動で設定したと仮定しています。あなたは、新しいパターン構文を認識するようjava.util.logging.FileHandlerをサブクラス化することができます

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()); 
    } 
} 

代わりのFileHandlerをインストールする次に、あなたがあなたのlogging.propertiesを使用してFileHandlerのサブクラスをインストールします。

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

このカスタムプロパティを設定していない場合、このコード例はデフォルトでホームディレクトリになります。

関連する問題