ASP .NET Core Web Api + Angular

ASP .NET Core Web API_ 03_ 日志log

2018-10-21  本文已影响70人  xtddw

Log

  1. 默认自带log >>>Program
WebHost.CreateDefaultBuilder()中做了默认配置
CreateDefualtBuilder
  1. Log API
    ASP .NET Core 提供了一套Log API, 它可以各种各样的Log提供商配合使用. http://www.cnblogs.com/cgzl/p/9019314.html
    内置6个Log提供商:

ILogger接口

  1. 创建ILogger的时候指明分类,分类名约定是调用类的全名(string) PostController例如:
    依赖注入ILogger<TCategoryName>
    ILogger
    调用
    OK
  2. 在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其他

  1. 级别
    • LogTrace(), 0,记录追踪信息
    • LogDebug(), 1,记录调试信息
    • LogInformation(), 2,记录信息性的事情
    • LogWarning(), 3,记录警告信息
    • LogError(), 4,记录异常
    • LogCritical(), 5,用来记录严重的事情
  2. Event ID
  3. 信息模板
  4. 异常
  5. 过滤
  6. 作用范围
    ……
LogError

添加Serilog

  1. 安装包
    Install-Package Serilog
    Install-Package Serilog.AspNetCore
    Sinks日志输出媒介(控制台、文件、sqlserver等)
    Install-Package Serilog.Sinks.Console
    Install-Package Serilog.Sinks.File
  2. 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
上一篇 下一篇

猜你喜欢

热点阅读