问题标签 [ilogger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
435 浏览

mono - Serilog 不记录到文件,只记录到控制台

我目前正在开发一个单声道项目并想在那里使用 Microsoft.Logging + Serilog,但我偶然发现了以下问题:当我手动配置 Serilog 时,它会同时登录控制台和文件(如果我已经配置了两个参数)。但是当我使用配置文件时,Serilog 总是忽略对文件的日志记录。

找到配置文件并从那里读取参数,因为如果我在那里添加“控制台”,Serilog 会登录到控制台。

根据我的理解,使用这些设置,Serilog 应该登录到控制台和文件。我期待这个日志文件在"folder with appsettings.json"/logs. 但它只登录到控制台。当我删除时"Console",它不会在任何地方记录。我不明白为什么会这样,所以我发布了一些基本的代码部分。如果我没有提供足够的信息,请在问题下方的评论中写信给我。

appsettings.json

这是我在一个类中配置 Serilog 的方法,这些方法在应用程序启动后不久执行:

最后是方法AddLogger()LogApplicationStart()LogApplicationStart()

经过这一切,控制台中的输出是(是的,它是 Godot):

Mono:日志文件为:'C:\Users\Albert\AppData\Roaming/Godot/mono/mono_logs/2021_01_27 12.46.37(105008).txt'

[12:46:38 INF] 应用程序已启动

Mono 日志文件与我的日志文件无关。我还尝试在应用程序中添加Log.CloseAndFlush()当前LogApplicationStart()唯一的方法,但它也没有帮助我。

当然,我知道这里有很多类似的问题,但我找不到我的问题的解决方案。

0 投票
1 回答
439 浏览

wcf - 如何将 Application Insights 添加到 ILogger将 Unity DI 用于 WCF 服务

我的不幸任务是将 WCF 项目更新到 .NET Framework 4.8 并用 Microsoft Logging 和 Application Insights 替换现有的 log4net 异常处理。

我的方法是实现依赖注入以使实例化更容易,因为我已经习惯了 .NET Core 的这种设计方法。您可能知道,WCF 服务增加了其自身的复杂性,因为 WCF 负责实例化服务和较低级别的对象(如 custom customUserNamePasswordValidatorType)。我能够通过实现 WCF 服务工厂并使用它更新 svc 标记来处理大部分问题。

我已经通过适当的 NuGet 包将 Application Insights 添加到项目中,这些包更新了web.config适合httpModules一般异常处理的。我什至可以添加自定义TelemetryInitializerApplication_Start在消息中包含一些自定义属性。

我的问题是ILogger<T>将附加的 Application Insights 提供程序的实例添加到实例化服务中。

起初,由于Logger<T>. 通过将 my 更新WcfServiceFactory为以下内容已解决此问题

这允许将记录器的实例传递到每个服务的构造函数中。但是,对日志消息的调用永远不会写入 App Insights,并且对记录器的检查显示提供者为零。

我的猜测是,因为LoggerFactory正在创建一个新的实例,所以在 中使用的已经存在的实例httpModules被忽略了。

根据https://github.com/unitycontainer/microsoft-logging,我需要重构我正在做的事情并实际创建 a 的实例LoggerFactory并手动添加所需的提供程序。我的问题是我无法弄清楚如何使用 Application Insights 做到这一点。在我使用它的任何其他地方,我只会调用AddApplicationInsights()扩展方法,但这似乎不是一个选项(至少在 Unity 中不是)。

所以我想我的问题归结为以下问题

  1. 我可以WcfServiceFactory使用现有的 App Insights 日志记录吗?也许建立一些东西Global.asx
  2. 如何在WcfServiceFactory包含自定义遥测时手动将 App Insights 注册为提供者?
0 投票
1 回答
70 浏览

c# - 如何在具有单例模式的 .NET 库中使用 ILogger 抽象?

我有一个当前使用 NLog 进行日志记录的类库。我想更新这个库以使用来自Microsoft.Extensions.Logging.AbstractionsILogger<T>的抽象,以便这个库的使用者可以选择他们自己的日志框架。

该库使用带有私有构造函数和Instance属性的单例模式:

有什么建议可以让这个库保持单例,但允许消费者ILogger在启动/对象创建时提供实现?有没有办法让这个库在不改变单例模式的情况下接受来自其他应用程序的日志记录实现?

0 投票
2 回答
451 浏览

azure - Azure Durable 编排功能 ILogger 输出日志两次

有几个持久函数可以相互调用。 主编排 -> 子编排 -> 活动 -> 辅助异步方法

每个 func 都具有 ILogger 依赖关系,并在函数开始和函数结束时登录。出于某种原因,两个协调器都重复“启动时”消息。(见图)活动没有这个效果。(见图)多次运行下面的例子 - 同样的故事。

我也确信整个过程已经触发了一次。

这是编排器中的错误还是预期的行为?

运行结果

0 投票
1 回答
31 浏览

.net-core - 简单场景中的 net core 3.1 dep inj 错误,ILogger 奖金问题

我无法让基本 DI 在我的核心 3.1 项目中工作。我的类有一个无参数构造函数,但在调用控制器方法时出现此错误:无法创建类型为“NRA_Courses.Interfaces.ICourseRunner”的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。请注意,我什至添加了一个空构造函数以使其显式。我忽略了什么?

额外的问题,为什么我不能将日志记录注入这样的简单类?此代码在我尝试执行“= new Student()”的行上导致编译错误,因为 Student 不包含采用 0 个参数的构造函数。我认为这是另一个gimmee:

非常感谢!我花了时间研究,只是因为截止日期紧迫才问。

0 投票
1 回答
117 浏览

.net - 如何将服务注入 C# Dotnet Core ILogger?

我已按照https://docs.microsoft.com/en-us/dotnet/core/extensions/custom-logging-provider创建自定义记录器。我希望这个自定义记录器让消息由服务处理 - 我将在 DI 容器中作为服务提供。例如,将日志消息发送到 SignalR 集线器的客户端。

但是,这是不可能的,因为 ILogger 初始化发生在 Startup.cs 代码之前。是否有任何推荐的方式将消息从 ILogger 传递到另一个服务?我想在 ConfigureLogging 之前注册它会起作用,但我想先知道是否有任何明显的好选择。

0 投票
1 回答
148 浏览

azure-functions - 自定义 ILogger 范围值未按预期工作

我在这里遗漏了一些东西,因为大量文章表明它应该可以工作。该计划将创建一个自定义记录器实现,以便我可以以结构化的方式存储各种值。

但是,目前这些基础似乎不起作用。

我正在尝试使用范围ILogger来设置某些值,例如transactionId.

我正在使用 Azure 函数。在我添加的启动中

哪个工作正常。在我正在尝试的功能中..

我错过了什么?!

谢谢。

0 投票
0 回答
50 浏览

c# - 静态检测当前正在运行的 CmdLet

我有一个基础的 PowershellCmdLet类,它构建了一个static IServiceProvider. 从这个抽象派生的类CmdLet然后利用IServiceProviderfor DI。因为IServiceProvideris ,它会在每个 Powershell sessionstatic中构建一次,而不是每次执行任何派生的 CmdLet 时。

各种服务包括一个带有Microsoft.Extensions.Logging.ILogger. 我希望这些服务发出的日志在 Powershell 会话中发出。例如,当ILogger.LogTrace()被调用时,我希望将其传递给CmdLet.WriteVerbose()方法。

CmdletLogger按照这些思路创建了一个类:

我想通过 提供一个CmdletLogger可用的IServiceProvider,但我不知道如何检测当前正在运行CmdLetCmdletLoggerProvider类:

我意识到我可以制作IServiceProvider非静态的,并在连接日志记录时将其传递CmdLet给类,但是为单个会话中执行的每个执行CmdletLoggerProvider重新构建的性能影响......不值得。IServiceProviderCmdLetPowershell

我希望 Powershell 有类似的东西IHttpContextAccessor,但我一直没能找到这样的东西。

作为参考,抽象CmdLet类如下所示:

0 投票
0 回答
100 浏览

c# - 如何访问字典来自自定义 ILogger 日志方法中的状态参数?

我目前正在开发自定义 ILogger 实现,并希望能够将自定义日志记录参数作为 Dictionary<string, string> 传递。所以我这样调用 Ilogger 的日志函数:

我的问题是如何在 ILoggerLog<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)方法中访问实际的字典?它似乎最终出现在 TState 参数中,但我无法弄清楚如何从那里实际提取 Dictionary 。

0 投票
1 回答
548 浏览

c# - 如何将 Microsoft.Extesions.ILogger 与 NLog 一起使用?

我有一个系统,我想制作一个自定义日志来为每个用户创建单独的文件夹。现在,我在 NLog.Logger 中像自定义文件目标一样制作它

一切正常,但我想像 Microsoft.Extensions.ILogger 一样使用。如何将 NLog.Logger 导入 ILogger?或者我如何为 ILogger 进行自定义配置?