Tôi đọc mà bên trong MVC sử dụng khuôn khổ middleware đăng nhập hành động phạm vi withing contoller của:MVC phạm vi khai thác gỗ
Sử dụng Scopes ít, và chỉ cho những hành động với một sự khởi đầu bị chặn và kết thúc. Ví dụ: khung cung cấp phạm vi xung quanh các hành động MVC. Tránh lồng nhiều phạm vi vào nhau.
Và
Một phạm vi là một loại IDisposable trở bằng cách gọi phương pháp ILogger.BeginScope, kéo dài từ lúc nó được tạo ra cho đến khi nó được xử lý. Bất kỳ trạng thái ghi nào, chẳng hạn như id giao dịch, được đính kèm vào phạm vi khi được tạo.
Tôi đang cố gắng sử dụng tính năng này để viết một số thông tin nhật ký. Tôi thực hiện các bước dưới đây: Ứng dụng
1) tạo Asp.net MVC lõi
2) đặt thuộc tính "IncludeScopes" là "true" trong appsetting.json
3) tạo ra bộ điều khiển và hành động như thế này:
[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" };
}
}
Tôi hy vọng rằng luồng thông điệp tường trình của tôi luôn luôn sẽ chỉ chứa "Liệt kê tất cả các mục đã bắt đầu" và "Liệt kê tất cả các mục đã hoàn thành" các phần không được phân cách bởi nhau. Nhưng khi tôi bắt đầu hai yêu cầu trong thời gian cùng một dòng chảy log Got như:
RequestId: xxx Bảng liệt kê tất cả các mục bắt đầu
RequestId: yyy Bảng liệt kê tất cả các mục bắt đầu
RequestId: xxx Bảng liệt kê tất cả các mục xong
RequestId : yyy Liệt kê tất cả các mục đã hoàn thành
Lý do là gì? Đó là hành vi chính xác và tôi hiểu lầm "phạm vi" hạn trong bối cảnh khai thác gỗ?
Không đặt thẻ vào tiêu đề câu hỏi, trừ khi đó là nội dung hữu ích cho cuộc trò chuyện! http://stackoverflow.com/help/tagging – Tseng