2015-08-20 102 views
0

我正在使用Azure Web作業。另外我知道TextWriter用於在web作業(VS 2013)的情況下寫入日誌。但是,日誌是在blob容器下的「輸出日誌」文件夾下創建的。這些不是用戶友好的。我必須打開每個文件才能讀取寫入它的消息。登錄Azure Web作業

有什麼辦法可以改變日誌記錄到表,這是用戶友好的閱讀?

在此先感謝。

回答

0

我不確定是否有「原生」方式來執行此操作,但可以通過nuget添加Azure存儲客戶端並編寫自己的「日誌到Azure表」。

+0

https://msdn.microsoft.com/en-us/library/azure/gg433048.aspx此鏈接建議我們可以使用相同的診斷工具。但是我不確定如何進入診斷配置。 – genericuser

0

您可以使用Windows Azure的Semantic Logging Application Block。 它允許您登錄到Azure表格存儲。

定義您的EventSource:

// A simple interface to log what you need ... 
public interface ILog 
{ 
    void Debug(string message); 

    void Info(string message); 

    void Warn(string message); 

    void Error(string message); 

    void Error(string message, Exception exception); 
} 

實現的接口:

和實現(實現你的接口必須與NonEventAttributesee this post裝飾):

[EventSource(Name = "MyLogEventsource")] 
public class Log : EventSource, ILog 
{ 
    public Log() 
    { 
     EventSourceAnalyzer.InspectAll(this); 
    } 

    [NonEvent] 
    public void Debug(string message) 
    { 
     DebugInternal(message); 
    } 

    [Event(1)] 
    private void DebugInternal(string message) 
    { 
     WriteEvent(1, message); 
    } 

    [NonEvent] 
    public void Info(string message) 
    { 
     InfoInternal(message); 
    } 

    [Event(2)] 
    private void InfoInternal(string message) 
    { 
     WriteEvent(2, message); 
    } 

    [NonEvent] 
    public void Warn(string message) 
    { 
     WarnInternal(message); 
    } 

    [Event(3)] 
    private void WarnInternal(string message) 
    { 
     WriteEvent(3, message); 
    } 

    [NonEvent] 
    public void Error(string message) 
    { 
     ErrorInternal(message, "", ""); 
    } 

    [NonEvent] 
    public void Error(string message, Exception exception) 
    { 
     ErrorInternal(message, exception.Message, exception.ToString()); 
    } 

    [Event(4)] 
    private void ErrorInternal(string message, string exceptionMessage, string exceptionDetails) 
    { 
     WriteEvent(4, message, exceptionMessage, exceptionDetails); 
    } 
} 

現在你可以註冊您的活動資訊來源:

var log = new Log(); 
var eventListeners = new List<ObservableEventListener>(); 
// Log to Azure Table 
var azureListener = new ObservableEventListener(); 
azureListener.EnableEvents(log , EventLevel.LogAlways, Keywords.All); 
azureListener.LogToWindowsAzureTable(
      instanceName: Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID") ?? "DevelopmentInstance", 
      connectionString: CloudConfigurationManager.GetSetting("MyStorageConnectionString") 
      tableAddress: "MyLogTable"); 
eventListeners .Add(azureListener);