Azure, как включить полные журналы WebJob

Когда я запускаю консольное приложение в качестве веб-задания в Windows Azure, после нескольких строк журнала добавляется предупреждение:

[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

И перестает регистрироваться. Я просматривал все настройки на своем веб-сайте с помощью плана хостинга BASIC, но не смог найти ничего, что могло бы решить эту проблему.

Как я могу включить полные журналы webJob?

2 ответа

Решение

Способ включить полные (непрерывные) журналы WebJobs на самом деле в сообщении об ошибке: enable website application diagnosticsВы можете сделать это через портал Azure на вкладке КОНФИГУРАЦИЯ на веб-сайте, вы можете настроить журналы приложений для перехода в файловую систему (но только на 12 часов), в хранилище таблиц или хранилище больших двоичных объектов.

После включения полные журналы для WebJobs будут помещаться в выбранное хранилище.

Дополнительная информация о диагностике приложений для веб-сайтов Azure: http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/

Вы также можете использовать пользовательский TraceWriter.

Пример: https://gist.github.com/aaronhoffman/3e319cf519eb8bf76c8f3e4fa6f1b4ae

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

Пример реализации 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);
    }
}
Другие вопросы по тегам