如何在不同的方法中使用Ilogger ?

  • 本文关键字:Ilogger 方法 c#
  • 更新时间 :
  • 英文 :


我希望能够使用Ilogger以不同的方法为我的Azure函数记录不同的事情。作为一种标准,在方法参数中使用了Ilogger。但这不会为我工作,因为我需要能够调用我的方法没有参数。

的例子:

public async Task Run([TimerTrigger("0 0 10 * * *")] Ilogger logger)
{
await Method2()
}
public static async Task<String> Method2()
{
Method3()
//Here I need to also log using Ilogger.
}
public static async Task<String> Method3()
{
//Here I need to also log using Ilogger.
}

在我的脑海中,解决方案是将Ilogger记录器用作Method2的参数。但这将导致一个问题,因为我需要在我的Run方法中拥有它。

所以我不知道我如何能够登录不同的方法。

我总共有5种方法,它将需要登录。

我对Ilogger做了一些研究,但是我找不到任何与我的直接问题有关的东西。

我想用Ilogger创建一个构造函数,像这样:

public class Function1
{
private static ILogger<Function1> logger;
public Function1(ILogger<Function1> logger)
{
Function1.logger = logger;
}
public async Task Run([TimerTrigger("0 0 10 * * *")])
{
await Method2()
logger.Loginformation("Log stuff");
}
public static async Task<String> Method2()
{
//Here I need to also log using Ilogger.
logger.Loginformation("Log stuff");
}
...
}

我读过这个可以工作。我已经做了一些调试,并改变了一点,但没有运气。

如果有人对如何解决这个问题有什么想法或解决方案,请告诉我:)

编辑:

我已经使它不再是静态的,并将其更改为以下内容:

public class Function1
{
private ILogger<Function1> logger;
public Function1(ILogger<Function1> logger)
{
this.logger = logger;
}
public async Task Run([TimerTrigger("0 0 10 * * *")])
{
await Method2()
this.logger.Loginformation("Log stuff");
}
public async Task<String> Method2()
{
this.logger.Loginformation("Log stuff");
}
...
}

我没有异常,我试着调试这个,但不幸的是没有运气找到问题的原因。

不要为记录器使用静态属性:

public class Function1
{
private readonly ILogger<Function1> logger;
public Function1(ILogger<Function1> logger)
{
this.logger = logger;
}
public async Task Run([TimerTrigger("0 0 10 * * *")])
{
await Method2()
this.logger.Loginformation("Log stuff");
}
public async Task<String> Method2()
{
//Here I need to also log using Ilogger.
this.logger.Loginformation("Log stuff");
}
...
}

使用非静态属性,您将能够从类中的任何地方访问记录器。因此不需要将其作为方法参数添加。

使你的方法非静态将允许你使用this访问你的实例相关的属性。

您绝对不应该为日志记录器使用静态属性!

  • 您可以将记录器实例作为参数传递给静态方法。

  • 或者您可以将静态方法设置为非静态,并通过非静态属性访问记录器。

相关内容

  • 没有找到相关文章

最新更新