Ведение журнала на основе среды в .NetCore 2.2 с использованием ILoggerProvider - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю над. Net Механизм регистрации ядра 2.2. Пока я экспериментировал с журналированием на основе среды. Итак, я создал два новых файла appSettings. json с соответствующими средами вместе с appSettings. json, присутствующими в решении. Один для разработки, другой для производственной среды.

appsettings.json
{
  "Logging": {
    "LogLevel": {
      //"Default": "Debug",
      //"System": "Information",
      //"Microsoft": "Error"
    }
  }
}

appsettings.Development. json

{
  "Logging": {
    "LogLevel": {
     "Microsoft": "Information"
    }
  }
}

appSettings.Production. json

 {
  "Logging": {
    "Console": {
      "LogLevel": {
        "Microsoft": "Critical"
      }
    }
  }
}

Изменен файл StartUp.cs

public Startup(IConfiguration configuration, IHostingEnvironment env)
{

            Configuration = configuration;
            var currentEnvironment = env.EnvironmentName;
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{currentEnvironment}.json", optional: true);

}

Метод ведения журнала

public void LogExceptionToConsole()
{
            _logger.LogError("This is raised by error");
            _logger.LogCritical("This is raised by critical ");
}

И launchSettings. json

{
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:2131",
      "sslPort": 44388
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    },
    "DemoLoggingApplication": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Я понимаю, что среда задает c appSettings будет принят наивысший приоритет. И у меня есть два вопроса

1) Имеется ли в окружении спецификация c ведение журнала? Если да, то какие могут быть изменения в приведенных выше логах c.

2) Когда я запускал приложение в режиме разработки на профиле DemoLoggingApplication. Я вижу все журналы Information,Error & Critical.

Но когда я изменил значение ASPNETCORE_ENVIRONMENT с Development на Production для DemoLoggingApplication профиля и запустил приложение, я снова смог увидеть оба журнала типа Error & Critical. Кроме того, я установил, что провайдер Console должен отображать только Critical журналы типа Microsoft категории. Я также отображал Errors журналы.

Хотя я читал документы Microsoft Я не мог понять приоритеты. Может кто-нибудь объяснить мне подробно, почему я вижу оба журнала. Мне не хватает понимания? Пожалуйста, помогите мне.

Заранее спасибо


Обновлен вопрос после ответа Боба Он работал после изменения настроек приложения. json, appsettings.Development. json & appSettings.Production. json

appSettings. json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information" 
    }
  }
}

appsettings.Development. json

{
  "Logging": {
    "Console": {
      "LogLevel": {
        "Microsoft": "Information",
        "Default": "Information" // newly
      }
    }
  }
}

appSettings.Production. json

{
  "Logging": {
    "Console": {
      "LogLevel": {
        "Microsoft": "Critical",
        "Default" :  "Critical" // newly added line
      }
    }
  }
}

Теперь, когда я изменил среду на Development, я мог войти в систему с Information, но только после добавления категории Default как в разработку, так и в производство.

Я просто хотел узнать, почему это поведение? И каково влияние поддержания appsettings.json -> Logging при настройках разработки и производства.

Спасибо

1 Ответ

1 голос
/ 04 февраля 2020

Среда специфицируется c ведение журнала происходит.

В вашем примере оба appsettings.Development. json и appsettings.Production. json определяют LogLevel только для категории "Microsoft". Но регистрация, выполненная из вашего кода, попадает в другую категорию журнала, чей LogLevel не определен в файлах кода / конфигурации. Следовательно, он принимает минимальный уровень журнала по умолчанию как «Информация» в обеих средах.

Чтобы увидеть разницу, добавьте «Default» ключ с различными настройками LogLevel в разных средах, как показано ниже:

appsettings.Development. json

{
  "Logging": {
    "LogLevel": {
     "Microsoft": "Information",
     "Default": "Error"
    }
  }
}

appSettings. Производство. json

 {
  "Logging": {
    "Console": {
      "LogLevel": {
        "Microsoft": "Critical",
         "Default": "Critical"
      }
    }
  }
}
...