天蓝色函数日志错误慢
azure function logError slow
我有一个 Azure 函数,它的方法将 ILogger 作为参数。
log.LogInformation(...)
log.LogWarning(...)
速度很快,但是
log.LogError(...)
特别慢。
可能是什么原因?
2022-02-18T13:59:48.852 [Information] this is a test
2022-02-18T13:59:48.852 [Information] this is a test
x100
2022-02-18T13:59:48.856 [Information] Information loop: 4ms
2022-02-18T13:59:48.856 [Warning] this is a test
2022-02-18T13:59:48.856 [Warning] this is a test
x100
2022-02-18T13:59:48.859 [Information] Warning loop: 3ms
2022-02-18T13:59:48.902 [Error] this is a test
2022-02-18T13:59:48.996 [Error] this is a test
x100
2022-02-18T13:59:54.940 [Information] Error loop: 6080ms
日志级别的主要区别(如 LogInformation、LogError、LogWarning、LogCritical, etc.,) 是当您从应用程序代码中编写跟踪时,您应该为跟踪分配一个日志级别。日志级别为您提供了一种限制从跟踪中收集的数据量的方法。参考 here
我已经按照你的方法试过了,知道了日志级别的处理时间。
记录错误取决于应用程序代码失败。如果 azure 函数中有任何未处理的异常,这些异常仅由 LogError 处理(Exception,exceptionMsg),但 AppInsights 看不到它是失败。
- 为了Return更有意义的完整错误信息,我想这就是为什么你需要时间来执行错误日志。
遵循解决方法
我在这里添加日志级别以了解完成这些日志级别迭代次数所花费的确切时间。我看不到日志执行有任何延迟,这取决于我们在日志执行之前编写的业务逻辑。
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log,ExecutionContext context)
{
Stopwatch sw = Stopwatch.StartNew();
log.LogInformation("Time taken:"+ sw.ElapsedMilliseconds.ToString());
log.LogInformation("C# HTTP Information log");
log.LogInformation("C# HTTP information log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogWarning("C# HTTP Warning log");
log.LogWarning("C# HTTP warning log.");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogError("C# HTTP Error log");
log.LogError("C# HTTP Error log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogCritical("C# HTTP Critical log");
log.LogCritical("C# HTTP Critical log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
sw.Stop();
结果
我有一个 Azure 函数,它的方法将 ILogger 作为参数。
log.LogInformation(...)
log.LogWarning(...)
速度很快,但是
log.LogError(...)
特别慢。
可能是什么原因?
2022-02-18T13:59:48.852 [Information] this is a test
2022-02-18T13:59:48.852 [Information] this is a test
x100
2022-02-18T13:59:48.856 [Information] Information loop: 4ms
2022-02-18T13:59:48.856 [Warning] this is a test
2022-02-18T13:59:48.856 [Warning] this is a test
x100
2022-02-18T13:59:48.859 [Information] Warning loop: 3ms
2022-02-18T13:59:48.902 [Error] this is a test
2022-02-18T13:59:48.996 [Error] this is a test
x100
2022-02-18T13:59:54.940 [Information] Error loop: 6080ms
日志级别的主要区别(如 LogInformation、LogError、LogWarning、LogCritical, etc.,) 是当您从应用程序代码中编写跟踪时,您应该为跟踪分配一个日志级别。日志级别为您提供了一种限制从跟踪中收集的数据量的方法。参考 here
我已经按照你的方法试过了,知道了日志级别的处理时间。
记录错误取决于应用程序代码失败。如果 azure 函数中有任何未处理的异常,这些异常仅由 LogError 处理(Exception,exceptionMsg),但 AppInsights 看不到它是失败。
- 为了Return更有意义的完整错误信息,我想这就是为什么你需要时间来执行错误日志。
遵循解决方法
我在这里添加日志级别以了解完成这些日志级别迭代次数所花费的确切时间。我看不到日志执行有任何延迟,这取决于我们在日志执行之前编写的业务逻辑。
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log,ExecutionContext context)
{
Stopwatch sw = Stopwatch.StartNew();
log.LogInformation("Time taken:"+ sw.ElapsedMilliseconds.ToString());
log.LogInformation("C# HTTP Information log");
log.LogInformation("C# HTTP information log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogWarning("C# HTTP Warning log");
log.LogWarning("C# HTTP warning log.");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogError("C# HTTP Error log");
log.LogError("C# HTTP Error log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
log.LogCritical("C# HTTP Critical log");
log.LogCritical("C# HTTP Critical log");
log.LogInformation("Time taken:" + sw.ElapsedMilliseconds.ToString());
sw.Stop();