.Net Core 1.1 не сериализует объект при регистрации - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть приложение ASP.NET Core 1.1, и я использую Serilog для ведения журнала.Я хочу войти в DTO-объект, сохранив его структуру.

Итак, если я напрямую использую Serilog.Log для регистрации DTO, как показано ниже

Serilog.Log.Information("Processing {@DTO}", dto);

Затем Serilog сериализует DTO и регистрирует его, как и ожидалось.

Однако я впрыскиваю Microsoft.Extension.Logging.ILogger в контроллер.Я думал, что он будет использовать настроенный регистратор для регистрации, и это будет сериализовать объект во время регистрации, но это не так.Регистрируется только имя типа объекта.

        public class HomeController
        {
            private readonly Microsoft.Extensions.Logging.ILogger _logger = null

            public HomeController(Microsoft.Extensions.Logging.ILogger logger)
            {
               _logger = logger;
            }           

            public asyc IActionResult Index()
            {               
                var dto = GetDTO();

                //did not work
                _logger.LogInformation("DTO {dto}",dto);

                //did not work
                _logger.LogInformation("DTO {@dto}",dto);

                //worked when i use serilog directly
                Serilog.Log.Information("DTO {@dto}",dto);

                //did not work
                Serilog.Log.Information("DTO {dto}",dto);
            }

        }

Startup.cs

    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();

        if (env.IsDevelopment())
        {
            // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
            builder.AddApplicationInsightsSettings(developerMode: true);
        }

        Configuration = builder.Build();

        Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(Configuration)
        .CreateLogger();

}

appsettings.json

"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Information"
    }
  },
  "Serilog": {
    "WriteTo": [
      {
        "Name": "ColoredConsole"        
      }
    ]
  },

1 Ответ

0 голосов
/ 23 февраля 2019

Я нашел это.Моя ошибка

в Startup.cs в методе настройки. Я только добавлял Serilog для среды, не предназначенной для разработки, и я проводил локальное тестирование с ASPNETCORE_ENVIRONMENT = Development.

if(!env.IsDevelopment())
{
   loggerFactory.AddSerilog();
}

я удалял, если условие иэто сработало.Так что _logger.LogInformation("DTO {@dto}",dto); работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...