2017-08-17 17 views
2

をログに記録する私は、クライアント側のロギング用SerilogとJSNLogを使用して.NETのコアプロジェクトを持っています。クライアントからサーバーにJSONオブジェクトを渡してSerilogを使用してログオンすると、ログに記録されたJSONオブジェクトは空になります。Serilog/JSNLog .NETのコアは、空のJSON

非常に奇妙な事は、私は付属のデバッガを持っている場合は、JSONが細かいログインしている、ということです。例えば

私が手デバッグ中:

[11:00:01 FTL] this works 
[11:00:02 INF] Request finished in 342.1967ms 200 text/plain 
[11:00:02 FTL] "testMessage": "this is an error" 
[11:00:02 INF] Request finished in 374.7837ms 200 text/plain 

もしくはCtrl + F5は、私が取得する場合:

[10:59:14 FTL] this works 
[10:59:14 INF] Request finished in 253.3403ms 200 text/plain 
[10:59:15 FTL] [[[]]] 
[10:59:15 INF] Request finished in 267.2553ms 200 text/plain 

私は問題がSerilogまたはJSNLogにあるのかわからないんだけどしかし、どんな助けも高く評価されます。

私はこれを複製することは非常に簡単なサンプルアプリを作りました。 Startup.csで Dependencies

public Startup(IHostingEnvironment env) 
     { 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(env.ContentRootPath) 
       .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
       .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
       .AddEnvironmentVariables(); 
      Configuration = builder.Build(); 

      Log.Logger = new LoggerConfiguration() 
       .WriteTo.Console().CreateLogger(); 
     } 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      loggerFactory.AddSerilog(); 

      if (env.IsDevelopment()) 
      { 
       app.UseDeveloperExceptionPage(); 
       app.UseBrowserLink(); 
      } 
      else 
      { 
       app.UseExceptionHandler("/Home/Error"); 
      } 

      app.UseJSNLog(new LoggingAdapter(loggerFactory)); 

      app.UseStaticFiles(); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        name: "default", 
        template: "{controller=Home}/{action=Index}/{id?}"); 
      }); 
} 

そして、私のフロントエンドで:.NETのコアのWebapp

依存関係として示されているデフォルトの使用

<script src="~/lib/jsnlog.js/jsnlog.min.js"></script> 
    <script> 
      JL().fatal({ testMessage: "this is an error" }); 
      JL().fatal("this works"); 
     </script> 

答えて

0

を私が持っていました同様の問題。私はJSNLogを見ましたが、問題と思われたのは、ログメッセージからオブジェクトをdesearializeするときに作成されていたJSON .NETオブジェクトのログです。

  1. 私は非構造含めるロガーの設定を変更するとDestructurama.JsonNetInstall-Package Destructurama.JsonNet
  2. Nugetパッケージインストール:

    Log.Logger = new LoggerConfiguration() 
         .Destructure.JsonNetTypes() 
         .WriteTo.Console() 
         .CreateLogger(); 
    
  3. は、私は次の回避策をしました
  4. は、私は次のようCustomLoggingAdapterクラスを作成しました:LogMessageHelpers.DeserializeIfPossibleがJSONLog GitHubレポに見出すことができる

    public class CustomLoggingAdapter: ILoggingAdapter 
    { 
        private ILoggerFactory _loggerFactory; 
    
        public CustomLoggingAdapter(ILoggerFactory loggerFactory) 
        { 
         _loggerFactory = loggerFactory; 
        } 
    
        public void Log(FinalLogData finalLogData) 
        { 
         ILogger logger = _loggerFactory.CreateLogger(finalLogData.FinalLogger); 
    
         Object message = LogMessageHelpers.DeserializeIfPossible(finalLogData.FinalMessage); 
    
         switch (finalLogData.FinalLevel) 
         { 
          case Level.TRACE: logger.LogTrace("{@logMessage}", message); break; 
          case Level.DEBUG: logger.LogDebug("{@logMessage}", message); break; 
          case Level.INFO: logger.LogInformation("{@logMessage}", message); break; 
          case Level.WARN: logger.LogWarning("{@logMessage}", message); break; 
          case Level.ERROR: logger.LogError("{@logMessage}", message); break; 
          case Level.FATAL: logger.LogCritical("{@logMessage}", message); break; 
         } 
        } 
    } 
    

    とは、次の形式を{@logMessage}

注有するようにログを変更しました

  • は、その後、私はこのように私のCustomLoggingAdapterに取るようにJSNLogの設定を変更しました

    app.UseJSNLog(new CustomLoggingAdapter(loggerFactory), jsnlogConfiguration); 
    
  • ログメッセージが表示されます。

    助けてくれたら教えてください

    関連する問題