students portal4 porta microsoft for azureweb azure azure-webjobs

portal4 - Azure cómo habilitar registros completos de WebJob



azureweb (2)

Cuando ejecuto una aplicación de consola como un WebJob en Windows Azure, después de algunas líneas de registro, se agrega una advertencia:

[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

Y deja de iniciar sesión. Estaba revisando todas las configuraciones en mi sitio web con el plan de hospedaje BASIC pero no pude encontrar nada que pudiera solucionar este problema.

¿Cómo puedo habilitar los registros completos de webJob?


La forma de habilitar los registros completos (continuos) de WebJobs es en realidad en el mensaje de error: enable website application diagnostics , puede hacerlo a través del portal de Azure en la pestaña CONFIGURAR del sitio web, puede configurar los registros de la aplicación para que vayan al sistema de archivos (pero solo por 12 horas), almacenamiento de tablas o blobs.

Una vez habilitados, los registros completos de WebJobs irán al almacenamiento seleccionado.

Más información sobre los diagnósticos de aplicaciones para los sitios web de Azure: http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/


También podrías usar un TraceWriter personalizado.

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

Configuración de JobHost

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

Ejemplo de implementación de 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); } }