私はC#MVC3 WebアプリケーションのログにNLogを使用しています。すべてのコントローラは、常に必要なメソッドとメンバにアクセスできるカスタムベース "ApplicationController"を継承しています。NLogを使用してログを記録するためにC#クラスの派生クラスが必要
私はすべてのコントローラは、この基底クラスを経由してロガーへのアクセス権を持って好きですが、ログ・ステートメントが発祥のクラスを派生するものを知るの詳細をしたいと思います
当社のアプリケーションコントローラは次のようになります。
public abstract class ApplicationController : Controller
{
protected Logger _logger;
protected virtual Logger Logger
{
get { return _logger ?? (_logger = LogManager.GetCurrentClassLogger()); }
}
protected ApplicationController()
{
Context = new Entities();
}
派生コントローラがLoggerをオーバーライドしない場合、すべてのステートメントはApplicationコントローラから発生したことを示します。現在、派生したすべてのコントローラーでは、基本的に同じLoggerステートメントを使用しています。例:
public class PropertyController : ApplicationController
{
private readonly DatatapeService _datatapeService;
private readonly PropertyService _propertyService;
protected override Logger Logger
{
get { return _logger ?? (_logger = LogManager.GetCurrentClassLogger()); }
}
これは明らかに実装が貧弱なことです。
- これをどのように乾かすことができますか?具体的には、私はC# の正確なこの特定のタスクを達成するために欠けていることを理解していますか?
- ロギングクラス(NLog)を直接公開していない場所で、次のようなロギングパターンがありますか?
TIA!
を期待しています
を使用する必要があります。NAME'はそれを行う必要があります。 –
これはまさに私が行ったことです。私はthis.GetTypeが最も派生したクラスを返すことを認識しませんでした。これにより、私はApplicationControllerで単一のプロパティを作成し、そのアプリケーション全体でそのロガーを使用することができました。 –
ダニのために助けてくれてありがとう:D –