我正在使用Serilog进行日志记录,并且无法弄清楚如何将日志事件分离到不同的文件.例如,我想将错误记录到error_log-ddmmyyyy.txt,并将警告记录到warn_log-ddmmyyyy.txt.
这是我的记录器配置:
Log.Logger = new LoggerConfiguration()
.WriteTo.Logger(lc =>
lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Warning"))
.WriteTo.RollingFile(
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\warn_log-{Date}.txt"),
outputTemplate: OutputTemplate))
.WriteTo.Logger(lc =>
lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Error"))
.WriteTo.RollingFile(
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\error_log-{Date}.txt"),
outputTemplate: OutputTemplate))
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
它仅在我在日志消息中指定{Level}属性时才有效.
我试图使用:
Matching.WithProperty<LogEventLevel>("Level", l => l == LogEventLevel.Warning)
Run Code Online (Sandbox Code Playgroud)
但它也没有用.
我正在尝试调用loggerFactory.AddSerilog(); 根据此文档,但无法识别AddSerilog方法:
"错误CS1061'ILoggerFactory'不包含'AddSerilog'的定义,也没有扩展方法'AddSerilog'接受第一个......".
我正在使用ASP.NET CORE和完整的.NET框架.我究竟做错了什么?
我想在 Azure Function v4 (.net 6) 中使用 Serilog(日志应发送到 Datadog)。为此,我安装了以下 nuget 软件包:
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
<PackageReference Include="Serilog.Sinks.Datadog.Logs" Version="0.3.5" />
Run Code Online (Sandbox Code Playgroud)
以下是 Startup.cs 类中的配置:
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
//... adding services etc.
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("Worker", LogEventLevel.Warning)
.MinimumLevel.Override("Host", LogEventLevel.Warning)
.MinimumLevel.Override("System", LogEventLevel.Error)
.MinimumLevel.Override("Function", LogEventLevel.Error)
.MinimumLevel.Override("Azure.Storage.Blobs", LogEventLevel.Error)
.MinimumLevel.Override("Azure.Core", LogEventLevel.Error)
.Enrich.WithProperty("Application", "Comatic.KrediScan.AzureFunctions")
.Enrich.FromLogContext()
.WriteTo.DatadogLogs("XXXXXXXXXXX", configuration: new DatadogConfiguration() { Url = "https://http-intake.logs.datadoghq.eu" }, logLevel: LogEventLevel.Debug)
.WriteTo.Console()
.CreateLogger();
builder.Services.AddSingleton<ILoggerProvider>(sp …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用Serilog和MS SQL Server接收器.我们假设我已经定义了以下类......
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
// ... more properties
}
Run Code Online (Sandbox Code Playgroud)
...并创建了一个实例:
var person = new Person
{
FirstName = "John",
LastName = "Doe",
BirthDate = DateTime.UtcNow.AddYears(-25)
};
Run Code Online (Sandbox Code Playgroud)
我在我的代码中放置了以下日志调用:
Log.Information("New user: {FirstName:l} {LastName:l}",
person.FirstName, person.LastName);
Run Code Online (Sandbox Code Playgroud)
是否可以在不将其添加到消息模板的情况下记录该BirthDate属性,以便在PropertiesXML列中呈现它?我想稍后在我的应用程序的日志查看器的详细信息视图中输出它.
我基本上寻找类似于对象解构的行为,但不打印平面对象作为日志消息的一部分.
我将所有类型的事件记录到单个Json文件,而不管LogLevel.现在我需要将一些自定义性能计数器记录到单独的Json文件中.怎么能在Serilog做到这一点.我应该创建不同的Logger实例并使用它来记录性能计数器吗?想在LibLog中使用它
我正在尝试为.NET Core项目配置Serilog.这就是我的意思appsettings.json:
"Serilog":
{
"MinimumLevel": "Verbose",
"Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"],
"WriteTo": [
{ "Name": "RollingFile",
"Args": {
"pathFormat": "C:/Logfiles/testapp/log-{Date}.json",
"textFormatter": "JsonFormatter",
"fileSizeLimitBytes": 2147483648,
"retainedFileCountLimit": 5
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我看到的问题JsonFormatter是没有拾取,而是使用默认文本格式化程序获取条目.我尝试过使用"formatter": "JsonFormatter",但结果相同.
如果我在代码中配置Serilog,一切正常:
var jsonSink = new RollingFileSink(config["Logger:FilePath"], new JsonFormatter(), 2147483648, 5);
var logger = new Serilog.LoggerConfiguration().WriteTo.Sink(jsonSink);
Run Code Online (Sandbox Code Playgroud)
这是我的相关部分project.json:
"Serilog": "2.2.1",
"Serilog.Extensions.Logging": "1.1.0",
"Serilog.Sinks.Literate": "2.0.0",
"Serilog.Sinks.Seq": "2.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Serilog.Enrichers.Thread": "2.0.0", …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我发现很难理解Serilog配置发生了什么.我有一个带有.NET Core 2.1的web api并已安装serilog.sink.logstash.我的创业公司有:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var serverURL = Configuration.GetSection("Logging")["logstashServer"];
var logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithProperty("Enviroment", env.EnvironmentName)
.Enrich.WithProperty("ApplicationName", "MyApp")
.WriteTo.LogstashHttp(serverURL);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
logger.WriteTo.Console();
}
loggerFactory.AddSerilog();
Log.Logger = logger.CreateLogger();
app.UseCors("CorsPolicy");
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
我的appsettings有一节:
"Logging": {
"logstashServer": "http://192.168.0.6:8101",
"IncludeScopes": false,
"Serilog": {
"MinimumLevel": {
"Default": "Error",
"Override": {
"Microsoft": "Error",
"Microsoft.AspNetCore.Hosting": "Error",
"Microsoft.AspNetCore.Mvc": "Error",
"System": "Error"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都会在控制台和logstash中看到,而不是记录很多不需要的信息,如:
[14:27:54 INF]执行的操作方法MyApp.Controllers.LoggerController.Post(MyApp),返回结果Microsoft.AspNetCore.Mvc.OkResult 0.0771ms.
MyApp> [14:27:54 INF]执行HttpStatusCodeResult,设置HTTP状态代码200
MyApp> [14:27:54 INF]执行操作MyApp.Controllers.LoggerController.Post(MyApp)2.0855ms …
我正在使用 .NET 6 构建一个 API,并计划使用 Serilog 作为记录器。根据https://onloupe.com/blog/serilog-vs-mel/有两种可能性:
一方面,专门使用 Serilog 的缺点是我的代码库中的所有内容都将依赖于 Serilog,因此将其与 Microsoft.Extensions.Logging 结合使用应该提供更大的灵活性。
另一方面,在https://github.com/serilog/serilog-extensions-logging上,他们明确建议对 .NET Core 项目使用https://github.com/serilog/serilog-aspnetcore :
ASP.NET Core 应用程序应该更喜欢 Serilog.AspNetCore 和 UseSerilog()。
有谁知道这个建议的原因,它在灵活性方面看起来与我相矛盾?
我正在尝试使用Topshelf和Serilog(分别为Serilog.Extras.Topshelf包)为我的Windows服务设置简单的日志配置.
HostLogger.UseLogger(new SerilogHostLoggerConfigurator(new LoggerConfiguration()
.WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
.WriteTo.ColoredConsole()
.MinimumLevel.Debug()
.CreateLogger()));
HostFactory.Run(x => {
x.UseSerilog();
...
Run Code Online (Sandbox Code Playgroud)
该服务运行正常,但没有输出,也没有输出到控制台或指定的日志文件(我可以看到正在创建一个但它仍然是空的).有没有人使用这两个框架?
我试图在ASP.NET核心应用程序(.NET框架)中实现SeriLog
以下是我目前执行的步骤 -
1)在Project.json中添加了以下引用
"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"
Run Code Online (Sandbox Code Playgroud)
2)在Startup类的构造函数中添加以下行 -
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
3)在Startup类的configure方法中添加以下行 -
loggerFactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)
4)将记录器注入HomeController,如下所示 -
ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
Run Code Online (Sandbox Code Playgroud)
5)在About操作中,尝试记录此类异常 -
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
try
{
throw new Exception("Serilog Testing");
}
catch (System.Exception ex)
{
this.logger.Error(ex.Message);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
在运行我的应用程序时,我收到以下错误 -
System.InvalidOperationException:尝试激活'AspNetCore_SeriLog_trial1.Controllers.HomeController'时,无法解析类型'Serilog.ILogger'的服务.在Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance
[TInstance]的lambda_method(Closure,IServiceProvider,Object [])上的Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)IServiceProvider serviceProvider,Type implementationType),位于Microsoft.AspNetCore.Mvc.Inv.Inter.ControllerActionInvoker.d__26的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)中的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext). .MoveNext()
有人可以帮我这个吗?Serilog缺少任何配置?
serilog ×10
c# ×7
asp.net-core ×3
logging ×2
.net ×1
.net-6.0 ×1
.net-core ×1
datadog ×1
microsoft.extensions.logging ×1
topshelf ×1