我想做一些简单的调试,而Console.Writeline似乎不再受Azure WebJobs的支持。
我知道使用TextWriter类就是答案,我只是将它注入到我的方法中。我不明白的是我怎么称呼那个方法。我不能使我的Main方法签名无效并将其注入其中。
请问我缺少什么?
public static void Main(TextWriter log)
{
//This is is not valid
}
对于连续的webjob,您可以这样做:
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)
{
}
}
虽然上面的内容是正确的,但您也可以创建自己的自定义TraceWriter实例,该实例可以拦截应用程序中的Trace调用。
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类的实例。I.e在程序.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
程序.cs
我认为您需要向签名添加QueueTrigger属性,Azure会在事件发生时调用它。例如:
public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger)
{
logger.WriteLine(logMessage);
}
请参阅此链接:https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#trigger