0

하늘색 웹 사이트에서 오류를 모니터링하고 캡처하는 스크립트를 작성하고 싶습니다. 이것을 위해 나는 푸른 스트리밍 로그를 활용하고 싶습니다.Azure 웹 응용 프로그램 오류 로그를 캡처하는 스크립트

Powershell 스크립트.

function Stream-Log 
{ 
Get-AzureWebsiteLog -Name HiWebApiService -Tail 
} 

Stream-Log 

위 스크립트 만 실행하면 로그가 스트리밍됩니다.

위의 스크립트를 C# 클라이언트에서 호출하고 싶습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     PowerShell psinstance = PowerShell.Create(); 
     const string getverbose = "$verbosepreference='continue'"; 
     psinstance.AddScript(string.Format(getverbose)); 
     psinstance.Invoke(); 
     psinstance.Commands.Clear(); 

     var scriptPath = @"E:\Azure\LogMonitor\LogMonitor\LogMonitor.ps1"; 

     psinstance.AddScript(scriptPath); 
     psinstance.Streams.Verbose.DataAdded += Verbose_DataAdded; 
     psinstance.Streams.Information.DataAdded += Information_DataAdded; 
     psinstance.Streams.Error.DataAdded += Error_DataAdded; 
     var results = psinstance.Invoke(); 


     Console.ReadLine(); 
    } 

    private static void Information_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     var newRecord = ((PSDataCollection<InformationRecord>)sender)[e.Index]; 
     Console.WriteLine("information updated: {0}", newRecord.Source); 
    } 

    private static void Verbose_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     var coll = (PSDataCollection<VerboseRecord>)sender; 
     var newRecord = (coll)[e.Index]; 
     Console.WriteLine("verbose updated: {0}", newRecord.Message); 
    } 

    private static void Error_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     ErrorRecord newRecord = ((PSDataCollection<ErrorRecord>)sender)[e.Index]; 
     Console.WriteLine("error updated: {0}", newRecord.ErrorDetails); 

    } 

몇 가지 이유로 하늘색 스트리밍 로그의 출력은 위의 이벤트에서 캡처되지 않습니다.

답변

0

귀하의 설명에 따라,이 튜토리얼 Executing PowerShell scripts from C#에 따라이 문제를 테스트 해 보았습니다. 나는 다음 다음과 같이 예상대로 작동 할 수, 코드를 사용하고 수정 :

class Program 
{ 
    static void Main(string[] args) 
    { 
     PowerShell psinstance = PowerShell.Create(); 

     psinstance.AddScript("Get-AzureWebsiteLog -Name brucewebapp -Tail"); 

     // prepare a new collection to store output stream objects 
     PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>(); 
     outputCollection.DataAdded += (s,e)=> { 
      var newRecord = ((PSDataCollection<PSObject>)s)[e.Index]; 
      Console.WriteLine(newRecord); 
     }; 

     psinstance.Streams.Verbose.DataAdded += Verbose_DataAdded; 
     psinstance.Streams.Information.DataAdded += Information_DataAdded; 
     psinstance.Streams.Error.DataAdded += Error_DataAdded; 
     psinstance.Invoke(null, outputCollection); 

     Console.ReadLine(); 
    } 

    private static void Information_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     var newRecord = ((PSDataCollection<InformationRecord>)sender)[e.Index]; 
     Console.WriteLine("information updated: {0}", newRecord.Source); 
    } 

    private static void Verbose_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     var coll = (PSDataCollection<VerboseRecord>)sender; 
     var newRecord = (coll)[e.Index]; 
     Console.WriteLine("verbose updated: {0}", newRecord.Message); 
    } 

    private static void Error_DataAdded(object sender, DataAddedEventArgs e) 
    { 
     ErrorRecord errorRecord = ((PSDataCollection<ErrorRecord>)sender)[e.Index]; 
     Console.WriteLine("error updated: {0}", errorRecord.Exception.Message); 

    } 
} 

enter image description here