4

簡単なデバッグを行いたいのですが、Console.Writeline は Azure WebJobs でサポートされていないようです。

TextWriter クラスを使用することが答えであることはわかっているので、それをメソッドに挿入するだけです。私が理解していないのは、そのメソッドを呼び出す方法です。Main メソッドの署名を無効にしてそこに挿入することはできません。

私は何が欠けていますか?

public static void Main(TextWriter log)
{
    //This is is not valid
}
4

3 に答える 3

5

継続的な Web ジョブの場合、次のように実行できます。

class Program
{
    private static void Main()
    {
        var host = new JobHost();
        host.Call(typeof(Program).GetMethod("Start"));
        host.RunAndBlock();
    }

    [NoAutomaticTrigger]
    public static void Start(TextWriter textWriter)
    {

    }
}
于 2015-12-15T00:18:59.220 に答える
4

上記は正しいですが、アプリケーションで Trace 呼び出しをインターセプトする独自のカスタム TraceWriter インスタンスを作成することもできます。

TraceWriter クラスの例:

using System.Diagnostics;
using Microsoft.Azure.WebJobs.Host;

namespace MiscOperations
{
    /// <summary>
    /// Custom <see cref="TraceWriter"/> demonstrating how JobHost logs/traces can
    /// be intercepted by user code.
    /// </summary>
    public class CustomTraceWriter : TraceWriter
    {
        public CustomTraceWriter(TraceLevel level)
            : base(level)
        {
        }

        public override void Trace(TraceEvent traceEvent)
        {
            // handle trace messages here
        }
    }
}

次に、JobHostConfuration セットアップで、TraceWriter クラスのインスタンスをコンソール アプリケーションのメイン メソッドに登録します。つまり、Program.cs にあります。

JobHostConfiguration config = new JobHostConfiguration()
{
    NameResolver = new ConfigNameResolver(),
};

// Demonstrates how the console trace level can be customized
config.Tracing.ConsoleLevel = TraceLevel.Verbose;

// Demonstrates how a custom TraceWriter can be plugged into the
// host to capture all logging/traces.
config.Tracing.Tracers.Add(new CustomTraceWriter(TraceLevel.Info));

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

このようにして、外部サービスへの書き込みやアラートの作成など、トレースを使用して他のことを行うことができます。

Azure SKD サンプル Gitthubから取得

CustomTraceWriter.cs

Program.cs

于 2016-04-05T10:19:09.503 に答える