かなり奇妙な問題があります。作成後にJavaファイルロガーがハイジャックされ、別のロガーに属するファイル(Gigaspaces APIから)にリダイレクトされる
Logger.getLogger()、FileHandle、およびSimpleFormatterを使用して標準Javaロガーを作成しました。 これらは正常に動作し、期待どおりにログファイルを出力します。
次に、独自のログを含むGigaspaces API(com.gigaspaces.gs-openspaces - Maven依存関係を介して含まれる)からいくつかのクラスを使用しました。 その後、私のロガーのすべての出力はGigaspacesログファイル(例えば、〜/ .m2/repository/com/gigaspaces/logs/2017-03-27〜12.46-gigaspaces-service-135.60.146.142-23534 .log)ではなく、適切なログファイルを使用する必要があります。
私はGigaspacesを初期化した後でさらにロガーを作成すると、これらの新しいロガーは期待どおりに動作します。ギガパスを初期化する前に作成されたロガーのみが影響を受けます。
私はGigaspacesのコードをちょっと調べてみましたが、そこにはたくさんのコードがあります。私はただちに何も見えなかった。
私のロガーの設定に何か問題がありますか?ライブラリがそのクラスに無関係な既存のロガーからの出力を盗むことができるようには思われません。
以下の短いテストプログラムは、問題を示しています。
Logger testLog = Logger.getLogger("testlog");
try {
FileHandler fh = new FileHandler("testlog.log");
fh.setFormatter(new SimpleFormatter());
testLog.addHandler(fh);
}
catch (Exception e) {
// Not important
e.printStackTrace();
}
testLog.log(Level.INFO, "This appears in the main log file");
// Spin up gigaspaces, even by trying to connect to a space that doesn't exist
UrlSpaceConfigurer testSpaceConfigurer = new UrlSpaceConfigurer("jini://*/*/testSpace?locators=127.0.01").lookupTimeout(1);
try {
GigaSpace g = new GigaSpaceConfigurer(testSpaceConfigurer).gigaSpace();
}
catch (Exception e) {
// This will throw an exception, just ignore it.
}
testSpaceConfigurer.close();
testLog.log(Level.INFO, "This appears in the (wrong) gigaspaces log file");
GigaSpacesは、デフォルトで、他のサービスからのフレームワークへのロギングをリダイレクトする別のロギングフレームワーク(log4j、logbackなど)を使用していると思います。 – john16384
私はチェックしましたが、log4jやその他のフレームワークに依存していないようです。それは、(Avalon)LogKitに推移的な依存関係があります。私はMavenを通してそれを除外しようとしましたが、それは何の違いもありませんでした。 –