2017-02-25 7 views
1

웹 서비스 프로젝트는 시작 코드에 내가 지금처럼 Serilog에서 로거를 만든 현재 내가 가지고 : 이 푸른 물방울 스토리지에 웹 서비스 프로젝트에서 생성 된 파일을 업로드

public Startup() 
     { 
      Log.Logger = new LoggerConfiguration() 
       .MinimumLevel.Debug() 
       .WriteTo.File(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\logs--"+ string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now) + ".log", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}",shared:true) 
       .CreateLogger(); 
     } 

웹 응용 프로그램이 종료

, 로그 파일은 프로젝트 도메인 폴더에 로컬로 생성됩니다. Azure Blob Storage를 사용하여이 파일을 업로드하고 싶습니다. 내 문제는 응용 프로그램이 어떤 이유로 든 종료 될 때 알 수없는 방법입니다. 오류가 발생하거나 개발자가 사용을 끝내면 말입니다. 세션에서 모든 로그를 블롭으로 업로드하고 싶습니다. 웹 서비스 코드에는 닫히기 전에 이동하여 업로드 할 수있는 영역이 있습니까?

너! 난 당신이 Global.asax 파일을 추가 할 수 있습니다 제안

protected void Application_End() 
     { 
      Log.Debug("We made it to application end"); 
      Log.CloseAndFlush(); 


     } 

답변

0

:

*** 편집 ****

나는 글로벌 파일의 방법을 추가했다. 알다시피이 목적을 달성하기 위해 Application_End 메서드를 사용할 수 있습니다.

Application_End는 ASP.NET 작업자 프로세스가 종료 될 때 트리거됩니다. 이는 일반적으로 구성 가능한 비활성 기간이 지난 후 또는 IIS (또는 관련 응용 프로그램 풀)가 종료되거나 다시 시작될 때 발생합니다.

나는 내 컴퓨터에 테스트 데모를 작성했습니다. Application_Start 메서드를 사용하여 세부 정보를 시작합니다. 정적 변수 "text"는 application_end에 file 매개 변수를 전달하는 데 사용됩니다.

자세한 내용은 아래 코드를 참조 수 :

의 Global.asax를 :

public class Global : System.Web.HttpApplication 
    { 
      static string text; 
     protected void Application_Start(object sender, EventArgs e) 
     { 
      text = AppDomain.CurrentDomain.BaseDirectory + "\\logs\\logs--" + string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now) + ".log"; 

      Log.Logger = new LoggerConfiguration() 
       .MinimumLevel.Debug() 
       .WriteTo.File(text, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}", shared: true) 
       .CreateLogger(); 
      Log.Information("Hello, world!"); 

      int a = 10, b = 0; 
      try 
      { 
       Log.Debug("Dividing {A} by {B}", a, b); 

      } 
      catch (Exception ex) 
      { 
       Log.Error(ex, "Something went wrong"); 
      } 
     } 

     protected void Application_End(object sender, EventArgs e) 
     { 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 

      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 


      CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 
      string text2 = text; 

      CloudBlockBlob blockBlob = container.GetBlockBlobReference(string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now) + ".log"); 

      Log.CloseAndFlush(); 


      using (var fileStream = System.IO.File.OpenRead(text)) 
      { 
       blockBlob.UploadFromStream(fileStream); 
      } 
     } 
    } 

결과 : 이것은 당신에게 약간의 팁을 줄 수 enter image description here

희망.

+0

웹 브라우저가 닫힌 후에 메소드가 실행되는지 만 확인하기 위해 메소드를 추가했습니다. 내가 잘못하고있는 것이 있습니까? 내가 OP에서 변경 한 것을 넣으십시오. – JPhillips

+0

Application_End에 도달 할 수있는 유일한 방법은 IIS Express를 중지하는 것입니다. 나는 달리기를 멈추고 거기에 도달 할 수있는 무언가를 찾고 있습니다. – JPhillips