2016-08-18 5 views
1

プロジェクトでjava.util.Loggerを拡張するクラスMyLoggerを作成しました。クラスごとに同じロガーを使用したいので、静的なgetLogger()メソッドがあります。 Loggerオブジェクトを返します。プログラム内のどこからでも呼び出し可能なクラスメソッドを作成します。

これは、他の人のプログラムに含めることができるjarファイルである予定ですが、このカスタムロガーを使用できないようにする(つまり、ロギングが必要な場合は設定する必要があります自分自身のロガーで自分自身をアップ)。

MyLoggerクラスを独自のパッケージにして、プロジェクト/ jarの残りの部分をgetLogger()メソッドにアクセスできるようにする方法はありますか?プロジェクト外のクラスではそれを呼び出すことはできません私の "親"パッケージに入れる唯一の方法は何ですか?

+3

※ちょっとしたパッケージプライベートですが、プロジェクト全体で*いいえそのようなアクセス修飾子はありません。 –

+0

さて、あなたは[SLF4J](http://www.slf4j.org)を評価しましたか? – dnault

+1

モジュールを使用してJava 9でこれを行うことができます。参考までに[この表](http://stackoverflow.com/a/33627846/276052)を参照してください。 – aioobe

答えて

2

はい、あなたはパッケージjava.utilにクラスを入れることができないことに気付きました。技術はJSAです。あなたはSecurityManagerを使うことができます(誰がaccesscontrollerを使うか)。 logger-eventを呼び出している図書館が自分の証明書で認証されていない場合は、チェックされていないAccessControlExceptionがスローされます。完全なJVMを認証し、あなたが/ jre/lib/security/cacertsに-XXXをJDKへの秘密鍵を追加することができますチェックを無効にするには

SecurityManager security = System.getSecurityManager(); 
if (security != null) { 
    security.checkWrite(name); // throws ACE 
} 

あなたはこのようたFileOutputStreamに良い例を見つけるだろう(キーストア)。

関連する問題