2014-05-06 12 views
16

aktivieren Wenn ich eine Konsolenanwendung als WebJob in Windows Azure, nach wenigen Zeilen log laufen fügt es eine Warnung:Azure, wie voll WebJob Protokolle

[05/06/2014 09:42:40 > 21026c: WARN] Reached maximum allowed output lines for this run, to see all of the job's logs you can enable website application diagnostics 

und Protokollierung stoppt. Ich ging durch alle Einstellungen auf meiner Website mit BASIC Hosting-Plan, aber ich konnte nichts finden, das dieses Problem beheben würde.

Wie kann ich vollständige WebJob-Protokolle aktivieren?

Antwort

15

Die Möglichkeit, vollständige (kontinuierliche) WebJobs-Protokolle zu aktivieren, ist tatsächlich in der Fehlermeldung: enable website application diagnostics, können Sie dies über das Azure-Portal auf der Registerkarte KONFIGURATION der Website tun, können Sie die Anwendungsprotokolle festlegen, entweder zu der Datei gehen System (aber nur für 12 Stunden), Tabellenspeicher oder Blobspeicher.

Sobald aktiviert, werden die vollständigen Protokolle für WebJobs auf dem ausgewählten Speicher abgelegt.

Mehr Infos auf Anfrage Diagnose für Azure-Websites: http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/

+0

wurde damit Ihre Frage beantwortet? –

+0

Ist es möglich, NLog Datei Ziel mit WebJobs zu verwenden? Ich habe einen ununterbrochenen Job, der nachts läuft und manchmal Fehler haben kann, die ich erst am nächsten Tag sehen werde. Ich möchte kontinuierlich mit einem rollenden Archiv loggen - alles, was NLog kann. Gibt es einen Pfad im Dateisystem, auf den der WJ Schreibzugriff hat? – kamranicus

+0

Ja, es wird sein, was auch immer die Website hat, was alles unter d: \ home (% home%) ist, gehe zu https: // {sitename} .scm.azurewebsites.net/debugconsole, um deine Dateien und dort zu sehen kann verstehen, wo Sie am besten Ihre Dateien/Log-Dateien setzen –

2

Sie könnte möglicherweise auch eine benutzerdefinierte TraceWriter verwenden.

Beispiel: https://gist.github.com/aaronhoffman/3e319cf519eb8bf76c8f3e4fa6f1b4ae

JobHost Config

static void Main() 
{ 
    var config = new JobHostConfiguration(); 

    // Log Console.Out to SQL using custom TraceWriter 
    // Note: Need to update default Microsoft.Azure.WebJobs package for config.Tracing.Tracers to be exposed/available 
    config.Tracing.Tracers.Add(new SqlTraceWriter(
     TraceLevel.Info, 
     "{{SqlConnectionString}}", 
     "{{LogTableName}}")); 

    var host = new JobHost(config); 
    host.RunAndBlock(); 
} 

Probe SqlTraceWriter Implementierung

public class SqlTraceWriter : TraceWriter 
{ 
    private string SqlConnectionString { get; set; } 

    private string LogTableName { get; set; } 

    public SqlTraceWriter(TraceLevel level, string sqlConnectionString, string logTableName) 
     : base(level) 
    { 
     this.SqlConnectionString = sqlConnectionString; 
     this.LogTableName = logTableName; 
    } 

    public override void Trace(TraceEvent traceEvent) 
    { 
     using (var sqlConnection = this.CreateConnection()) 
     { 
      sqlConnection.Open(); 

      using (var cmd = new SqlCommand(string.Format("insert into {0} ([Source], [Timestamp], [Level], [Message], [Exception], [Properties]) values (@Source, @Timestamp, @Level, @Message, @Exception, @Properties)", this.LogTableName), sqlConnection)) 
      { 
       cmd.Parameters.AddWithValue("Source", traceEvent.Source ?? ""); 
       cmd.Parameters.AddWithValue("Timestamp", traceEvent.Timestamp); 
       cmd.Parameters.AddWithValue("Level", traceEvent.Level.ToString()); 
       cmd.Parameters.AddWithValue("Message", traceEvent.Message ?? ""); 
       cmd.Parameters.AddWithValue("Exception", traceEvent.Exception?.ToString() ?? ""); 
       cmd.Parameters.AddWithValue("Properties", string.Join("; ", traceEvent.Properties.Select(x => x.Key + ", " + x.Value?.ToString()).ToList()) ?? ""); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

    private SqlConnection CreateConnection() 
    { 
     return new SqlConnection(this.SqlConnectionString); 
    } 
} 
Verwandte Themen