3

追加されたものを削除する方法はありLoggerますか?経由して言う:

LogManager.GetLogger("loggerName")

私の研究では、それは不可能であるように思われます。私が見つけた最も近いものは、Clear 階層メソッドを呼び出す機能です。これは確かに既存のロガーをクリアしますが、これが最も安全なことではないことは言うまでもなく、それらを選択的に削除したいと思います。

いくつかの背景として、タスクごとに1つのファイルをログに記録しています。この場合、アプリケーションの存続期間ごとに数千の同時タスクと数十万のタスクが発生する可能性があります。1つのアプローチは、Loggerタスクごとにを作成し、タスクが完了したらそれを削除することです。ただし、選択的に削除する機能がないLoggerと、リタイアしたインスタンスによってメモリが消費されます。

もちろん、機能する代替設計もあります。Appendersこの問題は、Filters必要に応じて特定のに追加/削除することで解決できますLoggerLoggersまた、とのプールをAppenders作成して、タスクごとに構成することもできます。

追加された特定のロガーを削除する方法がない場合、それは明らかにショーストッパーではありません。Logger私が見逃したかもしれないものを削除する方法があるかどうか私はただ興味がありますか?

4

2 に答える 2

2

いいえ、できません。これは最近のFAQで具体的に言及されています:

ロガーインスタンスは作成のみのようです。ロガーインスタンスを削除する方法がないのはなぜですか? ユーザーがまだ参照している「削除された」ロガーのセマンティクスを定義することは非常に簡単です。

出典: プログラムでロガーを削除する機能

于 2017-06-06T22:12:46.857 に答える
1

久しぶりにまとめました。ロガーを単独で削除する方法を見つけられませんでした。ドキュメントで見たものは、それが可能であることを示唆していません。同時タスクの最大数までしか成長しないロガーのプールを共有するために私のために働いたソリューション。各タスクは、そのタスクに固有のアペンダーが追加されたプールからロガーを取得できます。タスクが完了すると、アペンダーが削除され、ロガーがプールに戻ります。

于 2016-03-12T20:23:41.083 に答える