我有一个Azure功能V3(.net核心).我使用的ILogger来自Microsoft. Extensions. Logging.我的问题是我不能让它做:
- 这个函数只记录我用ILogger在C#代码中输入的内容。
例如:log.LogInformation(“我的日志”);
- 没有来自内置日志记录功能的任何内容,包括错误、异常、依赖项,没有任何内容
我需要确切的***host.json***日志记录值来执行此操作。
仅包含我在C#代码中输入的内容,没有其他内容。
我的代码示例:
[FunctionName("GetNetworkHouseDetail")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "network/houseMonitoringDevices")] HttpRequest req, ILogger log, ClaimsPrincipal claims)
{
try
{
var start = DateTime.UtcNow;
// some actions
var end = DateTime.UtcNow;
var duration = (end - start).TotalSeconds;
log.LogInformation($"API - GetNetworkHouseDetail: took {duration} second to finish");
return new OkObjectResult(JsonConvert.SerializeObject(result));
}
catch (Exception ex)
{
log.LogError($"{ex.GetExceptionMessages()}", ex);
}
}
2条答案
按热度按时间wnavrhmk1#
您可以使用日志级别来实现这一点。
您可以在没有任何自定义配置的情况下使用Application Insights。默认配置可能会导致大量数据。如果您使用的是Visual Studio Azure订阅,则可能会达到Application Insights的数据上限。在本文后面的部分,您将了解如何配置和自定义函数发送到Application Insights的数据。对于函数应用程序,日志记录是在host.json文件中配置的。
通过使用LogLevel None,可以禁用给定类别和提供程序的所有日志记录。
例如,您可以执行
它将禁用除您的函数之外的所有日志记录。您编写的函数的日志类别是“Function.<YOUR_FUNCTION_NAME>. User "。(替换<YOUR_FUNCTION_NAME>为您的函数的实际名称,来自代码中的FunctionName属性)
不幸的是,你必须指定所有函数,你不能包括通配符,比如指定
"Function.*.User": "Information"
。你 * 可以 * 执行"Function": "Information"
将所有函数的日志级别设置为Information,但是这样也会出现一些额外的日志。这 * 将 * 从日志记录中排除相关性和请求跟踪。请参阅this。
如果您在任何时候想要包括请求和依赖项,则需要将以“Function”开头的所有类别的日志级别设置为
Information
。您可以从“主机”类别禁用日志记录,但它们是特殊类别,您现在可能需要这样做。
i2loujxw2#
指定LogLevelx 1 m0n1x对我来说根本不起作用,即使显式地编写整个名称空间和函数名也是如此。但是,即使它起作用了,需要为每个函数编写一行这样的代码也是非常麻烦的,更不用说添加/删除/重命名函数和名称空间时的脆弱性了。生成的类别。目前看来工作正常。