ASP .NET Core Web API_ 03_ 日志log
2018-10-21 本文已影响70人
xtddw
Log
- 默认自带log >>>Program
WebHost.CreateDefaultBuilder()中做了默认配置
CreateDefualtBuilder
- Log API
ASP .NET Core 提供了一套Log API, 它可以各种各样的Log提供商配合使用. http://www.cnblogs.com/cgzl/p/9019314.html
内置6个Log提供商:
- Console
- Debug
- EventSource
- EventLog
- TraceSource
- Azure App Service
第三方提供商: - Nlog
- Serilog
ILogger接口
- 创建ILogger的时候指明分类,分类名约定是调用类的全名(string)
PostController
例如:
依赖注入ILogger<TCategoryName>
ILogger
调用
OK - 在ILoggerFactory 上调用CreateLogger方法时可以指定分类的名称.
[Route("api/posts")]
public class PostController : Controller
{
private readonly IPostRepository _postRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly ILogger _logger;
public PostController(
IPostRepository postRepository,
IUnitOfWork unitOfWork,
ILoggerFactory loggerFactory)
{
_postRepository = postRepository;
_unitOfWork = unitOfWork;
_logger = loggerFactory.CreateLogger("Blog.Api.Controllers.PostController");
}
[HttpGet]
public async Task<IActionResult> Get()
{
var posts = await _postRepository.GetAllPostsAsync();
_logger.LogError("Get All Posts ......");
return Ok(posts);
}
ILogger其他
- 级别
- LogTrace(), 0,记录追踪信息
- LogDebug(), 1,记录调试信息
- LogInformation(), 2,记录信息性的事情
- LogWarning(), 3,记录警告信息
- LogError(), 4,记录异常
- LogCritical(), 5,用来记录严重的事情
- Event ID
- 信息模板
- 异常
- 过滤
- 作用范围
……
添加Serilog
- 安装包
Install-Package Serilog
Install-Package Serilog.AspNetCore
Sinks日志输出媒介(控制台、文件、sqlserver等)
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File
… - Main()中配置
public static void Main(string[] args)
{
//配置Serilog
Log.Logger = new LoggerConfiguration()
//最低输出级别为Debug
.MinimumLevel.Debug()
//以Microsoft开头的特殊,调整最小级别为Information
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File(Path.Combine("logs", @"log.txt"), rollingInterval: RollingInterval.Day)
.CreateLogger();
var host = CreateWebHostBuilder(args).Build();
//种子文件
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
try
{
var applicationContext = services.GetRequiredService<ApplicationContext>();
//调用方法创建种子数据
Seed.SeedAsync(applicationContext, loggerFactory).Wait();
}
catch (Exception e)
{
var logger = loggerFactory.CreateLogger<Program>();
logger.LogError(e, "Error occured seeding the Database.");
}
}
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//.UseStartup<Startup>();
.UseStartup(typeof(StartupDevelopment).GetTypeInfo().Assembly.FullName)
.UseSerilog(); //调用Serilog,覆盖掉CreateDefaultBuilder中的默认配置
}
Console
File