Я читал, что в MVC Framework промежуточного использования регистрации действия Scope жгутов в: Контроллер илитMVC каротаж сфера
Используйте Scopes экономно, и только для действий с ограниченным началом и концом. Например, структура обеспечивает область действия MVC. Избегайте вложенности многих областей внутри друг друга.
И
Область действия представляет собой IDisposable тип, возвращаемый с помощью вызова метода ILogger.BeginScope, который длится от момента его создания до тех пор, пока не будет удален. Любое состояние регистрации, такое как идентификатор транзакции, присоединяется к области при ее создании.
Я пытаюсь использовать эту функцию для записи некоторых данных журнала. Я выполнил шаги:
1) создать ядро Asp.net MVC приложение
2) установить свойство "IncludeScopes", как "истинный" в appsetting.json
3) создать контроллер и действие, как это:
[Route("api/[controller]")]
public class TodoController : Controller
{
private readonly ILogger<TodoController> _logger;
public TodoController(ILogger<TodoController> logger)
{
_logger = logger;
}
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation(1000, "Listing all items started");
Thread.Sleep(2000);
_logger.LogInformation(1000, "Listing all items finished");
return new string[] { "value1", "value2" };
}
}
Я ожидаю, что поток сообщений в журнале всегда будет содержать только «Листинг всех элементов» и «Составление списка всех элементов», которые не разделены друг другом. Но когда я начал два запроса в то же время поток журнала GOT как:
RequestID: хая Listing всех элементов начал
RequestID: ий Список всех элементов начал
RequestID: ххй Список всех элементов закончили
RequestID : yyy Составление списка всех объектов
В чем причина? Правильно ли это поведение, и я неправильно понял термин «область действия» в контексте ведения журнала?
Не помещайте теги в заголовок вопроса, если только это не является органическим для разговора! http://stackoverflow.com/help/tagging – Tseng