2017-01-05 43 views
1

私はlog4j2を使ってカスタムアペンダーを書いています。私がシングルトンにすることができる簡単な方法はありますか? @Pluginと@PluginFactoryを使用しています。log4j2シングルトンカスタムアペンダー@PluginFactoryを使用

実際これは私が実行している問題です(シングルトンは解決策ではありません)。私は次のコードを使用してカスタムアペンダーを作成しました

MyAppender myAppender = MyAppender.createAppender(MyAppender.MY_APPENDER_NAME); 
final LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); 
final Configuration config = loggerContext.getConfiguration(); 
myAppender.start(); 
config.addAppender(myAppender); 
AppenderRef[] refs = new AppenderRef[] { AppenderRef.createAppenderRef(MyAppender.MY_APPENDER_NAME, null, null) }; 
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.DEBUG, Logger.getRootLogger().getName(), "true", refs, null, config, null); 
loggerConfig.addAppender(myAppender, Level.DEBUG, null); 
config.addLogger(Logger.getRootLogger().getName(), loggerConfig); 
ctx.updateLoggers(); 
return myAppender; 

私のアペンダーは別の方法xyz()を持っています。次のコードを使用してxyzを呼び出そうとすると、代わりにappenderのappendメソッドが呼び出されます。これは非常に驚くべきことであり、なぜこれが起こっているのかの手がかりはありません。

また、appenderの別のインスタンスを作成すると、getAppenderを使用してそれをフェッチするのではなく、うまく動作します。 :(あなたは、静的最終フィールドのキャッシュ、それを単一のインスタンスを作成し、@PluginFactory注釈付きファクトリメソッドからそのインスタンスを返すことができ

答えて

0

明示的にあなたのためのパラメータを変更するユーザーを防ぐためにしたいと仮定しアペンダーが設定を変更したときに、これをシングルトンにする動機付けですか?

+0

ありがとう、私は質問を更新しました。私はシングルトンが解決策だとは思いません。私がそれにアクセスしているかそれを作成している方法は間違っています。 – Andy897

関連する問題