2017-11-27 19 views
4

Asp.Net Core 2.0.1, EF 2.0.1 및 MVC 6을 사용하는 다중 프로젝트 솔루션에서 Logger로 Serilog를 설정하려고합니다.Asp.Net Core 2.0.1에 대한 Serilog 설정으로 로그가 생성되지 않습니다.

은 내가 수정 한 여기

appsettings.json 파일을 표시됩니다 해당 게시물에있는 JSON에 문제가 있습니다 대부분이 블로그 게시물 Set up Serilog post

의 지침에 따라, Serilog을 설정 한

(210)

나는 Program.cs

public static int Main(string[] args) 
{ 
    var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 

    var configuration = new ConfigurationBuilder() 
     .SetBasePath(Directory.GetCurrentDirectory()) 
     .AddJsonFile("appsettings.json") 
     .AddJsonFile($"appsettings.{currentEnv}.json", optional: true) 
     .AddEnvironmentVariables() 
     .Build(); 

    //Configure logger 
    Log.Logger = new LoggerConfiguration() 
     .ReadFrom.Configuration(configuration) 
     //do this for now 
     //TODO:figure out how to add to Serilog config in appsettings.json 
     .WriteTo.Seq("http://localhost:5341") 
     .CreateLogger(); 

    Log.Information("Logger created"); 

    try 
    { 
     Log.Information("Starting web host"); 
     BuildWebHost(args).Run(); 
     return 0; 
    } 
    catch (Exception ex) 
    { 
     Log.Fatal(ex, "Web Host terminated unexpectedly"); 
     return 1; 
    } 
    finally 
    { 
     Log.CloseAndFlush(); 
    } 
    //BuildWebHost(args).Run(); 
} 

public static IWebHost BuildWebHost(string[] args) => 
    WebHost.CreateDefaultBuilder(args) 
      .UseStartup<Startup>() 
      .Build(); 

의 기본 방법 그리고 내 시작 방법 로거 구성 작업이

services.AddLogging(loggingBuilder => 
      loggingBuilder.AddSerilog(dispose: true)); 
나는를 실행하면 내가 Serilog가 로그 폴더를 만들 것이라고 가정했다

로그 폴더 나 로그가 없습니다. 로그 폴더를 솔루션의 루트와 웹 응용 프로그램 프로젝트에 추가하고 다시 실행했습니다. 로그가 없습니다. 블로그 게시물 작성자는 컴퓨터 루트 폴더를 살펴 보라고 제안했습니다. C와 OneDrive 메인 폴더 (OneDrive에 저장된 솔루션 파일)에서 보았지만 거기에는 로그가 하나도 없었습니다.

나는 다음

System.IO.FileNotFoundException이 HRESULT = 0x80070002가 메시지 = 구성 파일 'appsettings.json이'을 (를) 찾을 수 없습니다 발생 및 선택하지 경고 스택 추적을 나타났습니다. 실제 경로는 'C : \ Users \ OneDrive \ TestingConfigurationAspNetCore2 \ TestMvcApp \ bin \ Debug \ netcoreapp2.0 \ appsettings.json'입니다. 자료 = 스택 트레이스 : Microsoft.Extensions.Configuration.FileConfigurationProvider.Load (부울 장전) Microsoft.Extensions.Configuration.ConfigurationRoot..ctor에서 Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()에서 에서 (IList`1 제공) Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()에서

응용 프로그램에서 실패했기 때문에 내가, 내가 설정 한 구성의 세트 목욕 경로 방법을 추가 한 이유는,이 경고를 얻고 있었다

코드 라인

bin 폴더에서 파일 이름이 appsettings.json이 아니고 TestMvcApp.runtimeconfig.json이라는 파일이 꽤 명확하기 때문입니다.

.SetBasePath를 추가하면 코드가 실행되어 구성 설정 후 중단 점을 적용합니다. 구성 객체에는 내 appsettings.json 파일의 모든 설정이 포함되어 있으므로 왜 스택 추적 오류가 발생합니까? 나도 몰라하지만 나는 아무런 이유도없이 로그를 기록 할 것이다. (콘솔에 로그 메시지가 나타나지 않는다.)

왜 스택 추적 오류가 발생했는지, 또는 기록되는 로그 메시지가없는 이유에 대한 도움말 로그 파일에 저장하거나 콘솔에 표시하는 것이 가장 좋습니다. 때문에 파일이 appsettings.json 호출되지 않습니다 bin 폴더, 그라고 TestMvcApp.runtimeconfig.json에 매우 명백했다

+0

이 선'.WriteTo.Seq (에 "http : // localhost를 : 5341")는'당신이 로그 파일에 만에 기록되지 않은 것을 나타냅니다 로깅 서버. 그게 당신의 의도입니까? – CalC

+0

롤링 로그가 쓰지 않을 때 거기에 쓸 수 있는지를 알기 위해 추가했습니다. 그들 중 하나가 – dinotom

+0

가고 arent 내가 틀렸다면, Serilog 모든 WriteTo의 구성에 정의 된 것입니다 – dinotom

답변

4

.

TestMvcApp.runtimeconfig.json

는 파일 이름에서 분명로는 런타임 구성 파일의, 당신의 appsettings.json 없습니다.

appsettings.json은 빌드 중에 출력 디렉토리에 복사되지 않습니다. '새로운 경우 복사'상황에 맞는 메뉴를 선택 속성, 비주얼 스튜디오 솔루션 탐색기에서 그 선택 appsettings.json를 수정하고 설정하려면 '항상 복사'하거나 '출력 디렉토리에 복사'

또한 당신의 JSON 구성이 몇 가지 문제가 있습니다

  1. Serilog 섹션은 ApplicationConfiguration 섹션 안에 있으면 안됩니다. 동일한 수준, 즉 최상위 섹션에 있어야합니다.
  2. 싱크대 (RollingFile)가 다른 내부에있는 의심스러운 WriteTo 섹션도 있습니다 (Async). Serilog에 대해 여기에서 확인하십시오 sample json configuration. Serilog.Sinks.RollingFile, Serilog.Sinks.Console 등이 여기에

나를 위해 잘 작동 구성 파일 (RollingFile 만 싱크)입니다 : 당신은 싱크 NuGets 해당 설치해야합니다 모든 싱크 (Serilog.Sinks.RollingFile, Serilog.Sinks.Console)를 사용하기 위해

  • :

    { 
        "ApplicationConfiguration": { 
         "ConnectionStrings": { 
          "DevelopmentConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo_Development;Trusted_Connection=True;MultipleActiveResultSets=true" 
         }, 
         "ApplicationInfo": { 
          "VersionNumber": "1.0.0", 
          "Author": "Jimbo", 
          "ApplicationName": "CustomTemplate", 
          "CreatedOn": "November 20, 2017" 
         } 
        }, 
        "Serilog": { 
         "Using": [ 
          "Serilog.Sinks.RollingFile" 
         ], 
         "MinimumLevel": { 
          "Default": "Information", 
          "Override": { 
           "Microsoft": "Warning" 
          } 
         }, 
         "WriteTo": [ 
          { 
           "Name": "RollingFile", 
           "Args": { "pathFormat": "c:\\log-{Date}.log" } 
          } 
         ], 
         "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ], 
         "Properties": { 
          "Application": "CustomTemplate" 
         } 
        } 
    } 
    

    enter image description here

  • +0

    @ CodeFuller ... 스택 추적 오류를 제거하고 SetBasePath를 제거하고 그것은 응용 프로그램을 실행하고, 모든 설정을 구성에 채우지 만 여전히 로그 파일이 없습니다 (Logger 구성에서 WriteTo.Seq을 제거했습니다). – dinotom

    +0

    WriteTo.Seq을 다시 추가 했으므로 로그에 SEQ가 표시되지만 콘솔이나 로그 파일에는 저장되지 않습니다. – dinotom

    +0

    내 대답의 업데이트 확인 – CodeFuller