ロギングプラットフォームを抽象化するsimpleシステムを作成する必要があります。アイデアは、some設定(これにより、ロギングプラットフォーム(nlog
、_log4net
_、_enterprise library
_))を交換またはアクティブ化できるようにしたいということです。問題ではないはずです)。サポートしたいプラットフォームごとにwrapperが必要で、必要なdllをロードしてロガーを作成することを知っています。
Log
、Debug
、Trace
などの最も一般的なメソッドを提供する抽象クラスまたはインターフェースを作成することを考えていました。
_interface ILogger
{
void Log(...);
void Debug(...);
// etc.
}
class NLogPlatform : ILogger
{
// create nlog, load config etc.
}
class Log4NetPlatform : ILogger
{
// create log4net, load config etc.
}
class LoggerFactory
{
public static CreateLogger(...)
{
// read settings and create a logger.
}
}
_
最初はログプロバイダーについて考えていましたが、プロバイダーがパターンではないことに気づいたので 。NET Design Patterns を調べましたが、実際には適切なものは何もありません。私は何かを逃したのですか、それともパターンがないのですか?
今回は最初からright方向に移動し、後でいくつかのツールをリファクタリングしたいので、まだ実際に開始していません。
そのようなシステムを設計する際に何を考慮すべきか、そしてそのためのパターンがあるかどうかを教えてもらえますか?
おめでとうございます。オブジェクトアダプタパターンを(再)発見しました。 1つのターゲットインターフェイス(ここではILogger
)とさまざまなアダプタクラスNLogPlatform
、Log4NetPlatform
、…。各アダプタークラスはターゲットインターフェイスに準拠し、メンバーとして含まれているアダプターオブジェクトへのすべての呼び出しをプロキシします。
このパターンをより明確に使用したい場合は、アダプタクラスNLogAdapter
などを呼び出します。
正しいログアダプターを挿入するためのファクトリーの使用は、これと完全に直交しており、依存関係の逆転の原則についてです。
これはデザインパターンとは関係ありません...
これは解決された問題であり、.Netが発明されて以来、何度も解決されてきました。
Commons.Loggingを使用するだけです。これは、構成された小さなリベラリティであり、要求したとおりに機能します。 https://github.com/net-commons/common-logging