2014-05-06 6 views
16

Quando eseguo un'applicazione console come WebJob in Windows Azure, dopo poche righe di log si aggiunge un avvertimento:Azure come abilitare i log completo WebJob

[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 

e si ferma la registrazione. Stavo passando tutte le impostazioni nel mio sito web con il piano di hosting BASIC ma non sono riuscito a trovare nulla che potesse risolvere il problema.

Come è possibile abilitare i registri completi di WebJob?

risposta

15

Il modo per abilitare i registri completi (continui) WebJobs è in realtà nel messaggio di errore: enable website application diagnostics, è possibile farlo tramite il portale di Azure nella scheda CONFIGURA del sito Web, è possibile impostare i registri dell'applicazione per passare al file- sistema (ma solo per 12 ore), memoria della tabella o archiviazione BLOB.

Una volta abilitati, i registri completi per WebJob andranno nella memoria selezionata.

Maggiori informazioni sulla diagnostica applicazione per i siti web Azure: http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/

+0

abbiamo risposto alla tua domanda? –

+0

È possibile utilizzare la destinazione del file NLog con WebJobs? Ho un lavoro continuo che viene eseguito durante la notte e a volte può avere errori che non vedrò fino al giorno successivo e mi piacerebbe la registrazione continua con un archivio a rotazione - tutto ciò che NLog può fare. Esiste un percorso nel file system a cui WJ ha accesso in scrittura? – kamranicus

+0

sì, sarà qualunque sia l'accesso al sito web al quale si trova qualcosa in d: \ home (% home%), vai a https: // {sitename} .scm.azurewebsites.net/debugconsole per vedere i tuoi file e lì tu posso capire dove meglio mettere i tuoi file/file di registro –

2

Si potrebbe anche potenzialmente utilizzare un TraceWriter personalizzato.

Esempio: 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(); 
} 

Esempio implementazione SqlTraceWriter

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); 
    } 
}