2016-12-18 11 views
0

顧客のDNNサイトにモジュールエラーロギングに問題があるカスタムモジュールがあります。このサイトはバージョン6.2からバージョン9.0にバージョン7.4にアップグレードされました。 7.4へのアップグレード以降、モジュール例外はAdmin/Host Eventsに表示されなくなりました。 DNN 7.4 as explained hereでモジュール例外ログが変更されたようです。これは前に動作したコードですが、今は何も記録されません。DNN(DotNetNuke)モジュールの例外がログに記録されない

テストオブジェクト:

public class foo 
{ 
    public int id { get; set; } 
    public string bar { get; set; } 
} 

テストWEBAPIコントローラ:

[DnnAuthorize] 
public class MyCustomModuleController : DnnApiController 
{ 
    private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(MyCustomModuleController)); 


    [HttpGet] 
    public HttpResponseMessage GetFoo(int id) 
    { 
     try 
     { 
      foo test = null; 
      var bar = test.bar; //will throw null exception 

      ... 

     } 
     catch (Exception ex) 
     { 
      Logger.Error(ex); //no log entries in db since ver. 7.4 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Server error"); 
     } 
    } 

は、私は有効にする必要がありますか、ログイベントの新しい方法があります設定はありますか?

+0

DotNetNuke.log4net.configのアップグレードに何か変更がありましたか? – DotNetNuclear

+0

@DotNetNuclear、log4Net設定ファイルは変更されていません –

答えて

1

DotNetNuke.Instrumentation.GetLogger()は、Log4Netのロギングを行うためのロギングオブジェクトを返します:/Portals/_default/Logs。また、[ホスト]> [ホストの設定]> [ログ]で表示することもできます。

通常、クラスに追加するには、コンストラクタで設定し、.Error()/。ErrorFormat()、.Warn()/。WarnFormat()などの関数を呼び出してエラーまたは情報を追加しますメッセージをロギングファイルに送信します。

public class MyCustomModuleController : DnnApiController 
{ 
    private DotNetNuke.Instrumentation.ILog Logger { get; set; } 

    public MyCustomModuleController() 
    { 
     Logger = DotNetNuke.Instrumentation.LoggerSource.Instance.GetLogger(this.GetType()); 
    } 

    public HttpResponseMessage GetFoo(int id) 
    { 
     try 
     { 
      ... 
     } 
     catch (Exception ex) 
     { 
      Logger.Error(ex); 
     } 
    } 
} 

その他のログ機能は、DotNetNuke.Services.Exceptionsを使用して例外をデータベースに記録することです。これらのエラーはEventLogおよびExceptionsテーブルに追加されます。

public class MyCustomModuleController : DnnApiController 
{ 
    public HttpResponseMessage GetFoo(int id) 
    { 
     try 
     { 
      ... 
     } 
     catch (Exception ex) 
     { 
      DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); 
     } 
    } 
} 

DNNがLog4NetプロセスとEventLogとの接続を切断した可能性があります。バージョン6でどのように動作したのか覚えていません。

+0

私は 'DotNetNuke.Services.Exceptions.Exceptions.LogException(ex)'をテストして動作します。それは、メソッドが非推奨ではないため、Log4Net実装で改訂されたようです。私はあなたの答えを受け入れたものとしてマークしますが、私は問題トラッカーにチケットを提出します。ありがとう –

関連する問題