- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Azure 函数中,run 方法创建一个 ILogger,在我的主类中,我可以用它来记录错误和信息,但是,我使用帮助程序类来运行我的 Graph API 和 Cosmos DB 查询。
在单独的类中记录错误和信息的最佳方法是什么,我应该在所有类或方法中传递日志吗?或者是否有更好的方法使 ILogger 在运行时可供所有类使用?
public class AzureFunction
{
public Task Run([TimerTrigger("0 0 1 * * *")] TimerInfo myTimer, ILogger log)
{
log.LogInformation("This message logs correctly");
GraphHelper graphHelper = new GraphHelper();
graphHelper.GetGraphData();
}
}
public class GraphHelper
{
public void GetGraphData()
{
try
{
asyncTask()
}
catch (Exception ex)
{
log.LogInformation($"{ex.Message} - How can I log this without passing ILogger to every class or method?");
}
}
}
最佳答案
正确的方法(恕我直言)是通过依赖注入(inject)。
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
namespace FunctionApp1
{
public class HelperClass : IHelperClass
{
private static ILogger<IHelperClass> _logger;
public HelperClass(ILogger<IHelperClass> logger)
{
_logger = logger;
}
public void Dowork()
{
_logger.LogInformation("Dowork: Execution Started");
/* rest of the functionality below
.....
.....
*/
_logger.LogInformation("Dowork: Execution Completed");
}
}
}
主机.json
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
},
"logLevel": {
"FunctionApp1.HelperClass": "Information"
}
}
}
辅助类
using System;
using System.Collections.Generic;
using System.Text;
namespace FunctionApp1
{
public interface IHelperClass
{
void Dowork();
}
}
主函数
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace FunctionApp1
{
public class MainFunction // Ensure class is not static (which comes by default)
{
private IHelperClass _helper;
public MainFunction(IHelperClass helper)
{
_helper = helper;
}
[FunctionName("MainFunction")]
public void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
// call helper
_helper.Dowork();
}
}
}
启动.cs
using Microsoft.Azure.Functions.Extensions.DependencyInjection; // install nuget - "Microsoft.Azure.Functions.Extensions"
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
[assembly: FunctionsStartup(typeof(FunctionApp1.Startup))]
namespace FunctionApp1
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IHelperClass,HelperClass>();
}
}
}
完整示例可以在 https://gist.github.com/nareshnagpal06/82c6b4df2a987087425c32adb58312c2 上找到
关于.net - Azure Functions - ILogger 跨类记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68624192/
我有记录到 Microsoft.Extensions.Logging.ILogger 的代码(主要是扩展方法)。 我已将 Serilog 配置为实际进行日志记录。 我找不到将 Serilog.ILog
这可能与Pass ILogger or ILoggerFactory to constructors in AspNet Core?有点关系,但是这是专门针对库设计的,而不是关于使用这些库的实际应用程
我一直在尝试将 .net core 库项目引用到我的 Azure 函数项目中,以调用 .net core 类库中定义的进程之一。 .net core 库项目使用 ILogger。 但是,每当我尝试运行
如果类 T 包含对 ILogger 的依赖,则依赖关系已解决: public class Foo { private ILogger _logger; public Foo(ILogg
我已经将 vs 2019 用于控制台应用程序(dotnet core 3.1), Install-Package Microsoft.Extensions.Logging.Console -Versi
使用Microsoft.ApplicationInsights.AspNetCore v2.6.1使用 .net core v2.2.2,我可以看到 Azure Application Insight
我正在尝试在我的 Azure 函数中使用 Serilog.ILogger。我正在设置它,以便我可以添加自定义属性。当我尝试运行 Azure 函数时,会弹出控制台窗口并显示以下错误: [2021-03-
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
这更像是一个架构问题:您是使用 ILogger(并通过 DI 将其传递到构造函数中)还是更喜欢静态类 Log? 我们经常使用 ILogger,但它似乎确实使代码困惑,尤其是当它通过构造函数传递时。如果
我是第 3 方服务的 C# 开源包装器的作者。我需要公开一个 ILogger 工具(例如 https://logging.apache.org/log4net/release/sdk/log4net.
我正在使用 NLog (v2.0) 试用 Ninject 的日志记录扩展 (v3.0),根据我的阅读,我不应该配置任何东西,就像auto-神奇的,我需要做的就是在需要的地方声明一个ILogger 依赖
当我尝试使用 ILogger.LogInformation() 输出带有货币格式说明符的数值时,我得到了一个不同于我使用 Console.Log(string.Format( ))。后者显示预期的美元
我正在未来项目的原型(prototype)中使用 Durable Azure Function。 基本上,我有一个由启动 Orchestrator 的 HTTP POST 请求触发的客户端 Azure
我有一个函数应用程序(版本 2.0)并尝试记录异常的堆栈跟踪。 try { processedOrder = await orderProcessin
请参阅Log unhandled exceptions to custom logger在github上。显然 Up to Preview 2 Blazor 通过 Console.WriteLine
我有一个 ASP.NET Core 2 Web 应用程序正在部署到生产环境,需要启用日志来解决错误。我无法在文档中的任何地方找到 appsettings.json 的记录器部分中的架构。这是我在那里的
我正在实现一个自定义的 Microsoft.Extensions.Logging.ILogger (和 ILoggerProvider。我想检索当前的身份,但我真的不知道,因为我无法注入(inject
我有一个 azure 功能,它可以毫无问题地记录信息。 namespace aspnetcore_azurefun_blob { [StorageAccount("AzureWebJobsSt
我有一个服务,它执行一些 REST API 调用,并且我在 API 调用之前和之后进行自定义日志记录: _logger.LogTrace("Invoked API {ApiName}", new {
我是一名优秀的程序员,十分优秀!