我有一个记录器包装器,我想用以下配置perse注入serilog:
var logger = new LoggerConfiguration()
.WriteTo.RollingFile(
AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "/Log-{Date}.txt")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到一种正确的注册方式.我想要它作为单身人士.以上是实例.
我尝试注册上面的实例.没工作.我试过lambda,没有工作.
什么有用?任何人?
我有一个面向 .Net Framework 4.6.1 的 Asp Net Core API。在这个项目中,我将 Serilog 与 Microsoft.Extensions.Logging 以及 Auofac 用于 DI。在控制器构造函数中使用带有 DI 的 ILogger< T> 记录器完美地工作,我也得到了日志。
当在 API 中我需要使用另一个项目 use Microsoft.Extensions.Logging 和 Autofac 并期望在某些构造函数中接收 ILogger< T> 时,乐趣就开始了。我在两个项目中都安装了相同版本的 Microsoft.Extensions.Logging。
我得到了以下例外情况:
Autofac.Core.DependencyResolutionException: '激活 Microsoft.Extensions.Logging.Logger
1[[Microsoft.AspNetCore.Hosting.Internal.WebHost, Microsoft.AspNetCore.Hosting, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]] -> Microsoft.Extensions.Logging.LoggerFactory -> ?:Microsoft.Extensions.Logging.ILoggerProvider[] -> Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider -> Microsoft.Extensions.Options.OptionsMonitor1时抛出异常[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral , PublicKeyToken=adb9793829ddae60]] -> Microsoft.Extensions.Options.OptionsFactory1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]] -> ?:Microsoft.Extensions.Options.IConfigureOptions1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral, PublicKey9Token=adb97ae] ][] -> Microsoft.Extensions.Logging.Console.ConsoleLoggerOptionsSetup -> Microsoft.Extensions.Logging.Configuration.LoggerProviderConfiguration`1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider, Microsoft.Extensions.Logging.Console, Version=2.2 .0.0,文化=中性,PublicKeyToken=adb9793829ddae60]]。'内部异常 1:DependencyResolutionException:在类型 …
我有一个 Windows 服务,它处理长时间运行的任务,并且永远不会关闭,除非强制关闭(即计算机关闭)。我希望在 Windows 服务启动和运行的整个过程中保持同一个 Serilog 实例处于活动状态(出于性能原因)。
但是,我只在 Dispose() 调用之后看到日志,如下所示。
var logger = new LoggerConfiguration()
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
logger.ForContext("TestContext", new { Machine = "TSTDB2" }, true).Information("Test");
logger.Dispose();
Run Code Online (Sandbox Code Playgroud)
我不介意几秒钟的延迟,但必须等到 Serilog 实例被处理对我来说不起作用。任何解决方案将不胜感激。
我有一个具有多个属性的对象,这些属性与我网站上刚刚发生的事件相关。
我想记录此事件,并将其每个属性显示在 Seq 中 - 作为属性。但是想要从实际的日志消息文本中省略大部分属性 - 所以我不希望它们出现在消息模板中。v
如果我这样做:
var logInfo= new LogInfo() {Foo = 1, Bar= "Pending"};
logger.Information("{@event}", logInfo);
Run Code Online (Sandbox Code Playgroud)
在 Seq 中直接针对日志亮起的唯一属性是 @event 属性。它实际上看起来像这样:
所以我试过这个:
var enricher = new DnnLogInfoEnricher(logInfo);
using (LogContext.PushProperties(enricher))
{
Log.Logger.Information("Event: {logInfo}", logInfo.LogTypeKey, logInfo.Exception);
}
Run Code Online (Sandbox Code Playgroud)
但我对这种方法的担忧是,由于此方法将触发大量次数,因此我不想每次都创建一个新的丰富对象实例 - 因为我喜欢保持正在创建的对象数量通常尽可能低。只是因为我担心 GC 影响(也许我的担忧是没有根据的?)。
这是实现我想要的(即使用浓缩器)的正确/正确方法还是我错过了什么?
干杯!
如果我有以下课程
public class Customer
{
public string Name;
}
Run Code Online (Sandbox Code Playgroud)
然后在Serilog中有以下log命令
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
var item = new Customer();
item.Name = "John";
Serilog.Log.Information("Customer {@item}", item);
Run Code Online (Sandbox Code Playgroud)
日志仅在Seq中显示为
Customer {}
Run Code Online (Sandbox Code Playgroud)
如果我将“名称”字段更改为一个属性,则可以使用,但我目前不希望这样做。有什么办法解决吗?
我正在将 Serilog 与 Seq 一起使用,并希望使用我自己的属性来丰富 Seq 中出现的日志记录。
如果我输入一个日志语句,如...
Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);
Run Code Online (Sandbox Code Playgroud)
在 Seq 我得到...
请注意,站点和活动值在 Seq 中显示为丰富的属性,但它们也显示在整体消息中。
如何记录获取丰富属性的位置,但文本消息行中没有显示值?请注意,我有 NuGet 包,它为每个调用添加了一个 ThreadId。我希望 Site 和 Activity 属性位于丰富的道具列表中,但不一定打印在消息行中。
对此的答案可能还需要了解我们的应用程序。
该应用程序是一个 Windows 服务,它产生多个做不同事情的活动。因此,Windows 服务编排了其中包含的各种活动。按照计划,它只是在每个活动上调用“流程”来完成一些工作。每次流程被编排器调用时,我都需要该 Activity 的所有日志记录以自动包含如上所示的 Site 和 Activity 值(以及更多属性值,但我不希望它们全部打印在消息行中)。
因此,我们将看到的不是上面的条目,而是... 注意消息现在只显示为“ProcessCycle”。
日志记录正在运行,但没有发布到我的本地 seq,我尝试添加 serilog 并使用 Serilog 但它没有登录到我的本地服务:相关问题
.csproj
<ItemGroup>
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.7" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.1" />
<PackageReference Include="Serilog" Version="2.8.0" />
<PackageReference Include="Serilog.AspNetCore" Version="3.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="3.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.6.0" />
Run Code Online (Sandbox Code Playgroud)
程序
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(loggingBuilder => {
loggingBuilder.AddEventLog();
loggingBuilder.AddSerilog();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.UseSerilog();
Run Code Online (Sandbox Code Playgroud)
appSettings.json:
"Serilog": {
"LevelSwitches": { "$controlSwitch": "Verbose" },
"MinimumLevel": { …Run Code Online (Sandbox Code Playgroud) serilog ×7
c# ×4
seq-logging ×4
.net ×2
seq ×2
asp.net-core ×1
autofac ×1
getseq ×1
logging ×1