标签: serilog

如何在 Serilog 中手动渲染模板及其参数?

我如何实现以下方法?

string BuildSerilogMessage(string messageTemplate, params object[] propertyValues);
Run Code Online (Sandbox Code Playgroud)

ILogger.Debug论点与etc接受的论点相同。

我想要这个的原因是因为我想在中间异常中保留模板/值,它也需要有单个字符串消息。它基本上是这样的:

// this exception is designed to be easily loggable by serilog
[Serializable]
public class StructuredException : Exception {
    public string MessageTemplate { get; private set; }
    public object[] PropertyValues { get; private set; }

    public StructuredException(string messageTemplate, params object[] propertyValues)
        : base(BuildMessage(messageTemplate, propertyValues))
    {
        MessageTemplate = messageTemplate;
        PropertyValues = propertyValues;
    }

    public StructuredException(Exception inner, string messageTemplate, params object[] propertyValues)
        : base(BuildMessage(messageTemplate, propertyValues), inner)
    {
        MessageTemplate = messageTemplate;
        PropertyValues = propertyValues; …
Run Code Online (Sandbox Code Playgroud)

.net serilog

3
推荐指数
1
解决办法
1482
查看次数

Serilog - AppSettings MinLevel 不起作用

我正在尝试连接我的接收器,似乎对于我的滚动文件接收器,我的调试消息没有被记录(仅信息及以上)。是我的配置错误吗?

<!-- Serilog Configuration -->
<add key="serilog:using:Email" value="Serilog.Sinks.Email" />

<!-- Configure Serilog Email Sink -->
<add key="serilog:write-to:Email" />
<add key="serilog:write-to:Email.mailServer" value="***" />
<add key="serilog:write-to:Email.toEmail" value="***" />
<add key="serilog:write-to:Email.fromEmail" value="***" />
<add key="serilog:write-to:Email.mailSubject" value="Comply360 Portal Endpoint (DEV)" />
<add key="serilog:write-to:Email.restrictedToMinimumLevel" value="Warning" />
<add key="serilog:write-to:Email.outputTemplate" value="{Timestamp:HH:mm:ss} [{Level}] [{SourceContext}] [{CorrelationId}] {Message}{NewLine}{Exception}" />

<!-- Configure Serilog RollingFile Sink -->
<add key="serilog:write-to:RollingFile" />
<add key="serilog:write-to:RollingFile.restrictedToMinimumLevel" value="Debug" />
<add key="serilog:write-to:RollingFile.pathFormat" value="C:\Logs\comply360-portal-{Date}.txt" />
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:HH:mm:ss} [{Level}] [{SourceContext}] [{CorrelationId}] {Message}{NewLine}{Exception}" />
Run Code Online (Sandbox Code Playgroud)

serilog

3
推荐指数
1
解决办法
3613
查看次数

在特定列内写入 Serilog ASP.NET MVC C#

我正在使用 C# 在 ASP.NET MVC 中处理 Serilog。

我必须记录日志类型,一种用于管理员级别,一种用于用户级别。

我想创建一个名为“角色”的额外列,根据微软会员资格,包含 1 个管理员或 2 个用户。

我使用了这段代码:

string connectionString = ConfigurationManager.........;

            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.MSSqlServer(connectionString, "Logs")
                .Enrich.WithExceptionDetails()
                .Enrich.With<HttpRequestIdEnricher>()
                .Enrich.FromLogContext()
                .CreateLogger();

            Log.Information("Web4 starting");
            Log.Information("log location: {0}", AppDomain.CurrentDomain.BaseDirectory);
Run Code Online (Sandbox Code Playgroud)

我已经将该列添加到数据库中

创建列后如何写入?

c# asp.net asp.net-mvc serilog

3
推荐指数
1
解决办法
3540
查看次数

将 SQL Server Serilog 接收器包装在 Async 中是否有意义?

我试图将日志从 .NET Core 应用程序写入 SQL Server 的性能影响降至最低。

过去,我将 SerilogFile水槽包裹在水槽内Async- 这极大地提高了性能。

SQL Server的水槽文档说,它定期批处理日志条目和/或当batchPostingLimit已经达到。我找不到关于当它确实决定发出INSERT命令时会发生什么的任何信息。

它是否相对于调用的代码异步发生Logger.Log(...)?如果没有,将 SQL Server Serilog 接收器包装在 Async 中是否有意义?

c# sql-server serilog .net-core

3
推荐指数
1
解决办法
569
查看次数

Serilog:RollingFile 在带有“appsettings.json”的 asp.net 核心中不起作用

我正在使用 asp.net core(website) 和 Serilog 进行日志记录。

安装的 Nuget 包是

Serilog
Serilog.AspNetCore
Serilog.Extensions.Logging
Serilog.Extensions.Logging.File
Serilog.Settings.Configuration
Serilog.Sinks.File
Serilog.Sinks.RollingFile
Microsoft.Extensions.Logging
Run Code Online (Sandbox Code Playgroud)

Main.cs 文件中的设置是:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration((WebHostBuilderContext, configurationBuilder) =>
             {
                 configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                 configurationBuilder.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true);
                 configurationBuilder.AddEnvironmentVariables();
             })
             .ConfigureLogging((hostingContext, loggingBuilder) =>
             {
                 loggingBuilder.ClearProviders();
                 loggingBuilder.AddSerilog();
             })
            .UseStartup<Startup>();  
}
Run Code Online (Sandbox Code Playgroud)

什么工作:

在 Startup.cs 文件中,如果我编写以下代码,则会创建日志文件。在这里,我在代码本身中指定配置。

  public void Configure(IApplicationBuilder app,
                                IHostingEnvironment env,
                                ILoggerFactory loggerFactory)
    {
     string logFilePath = Path.Combine(env.ContentRootPath, …
Run Code Online (Sandbox Code Playgroud)

c# logging serilog asp.net-core

3
推荐指数
1
解决办法
2343
查看次数

覆盖 MinimumLevel 在 Serilog 中不起作用

尝试为 Serilog 2.8.0(在 .NET 4.6.2 中)设置最低日志级别。日志记录工作正常,但不是覆盖功能。

这是我的Program.cs

using System;
using LogTest1.Classes;
using Microsoft.Extensions.Configuration;
using Serilog;
using SomeLib;


namespace LogTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", false, true)
                .Build();

            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();

            Log.Verbose("Verbose");
            Log.Debug("Debug");
            Log.Information("Information");
            Log.Warning("Warning");
            Log.Error("Error");
            Log.Fatal("Fatal");

            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.json文件:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "LogTest": "Information"
      }
    },
    "WriteTo": [
      { …
Run Code Online (Sandbox Code Playgroud)

c# logging overriding serilog log-level

3
推荐指数
1
解决办法
7940
查看次数

.Net Core 3.1 在 Microsoft.Extensions.Logger 中使用 Serilog

在这个应用程序中,我已经引入并设置了 Serilog,它适用于异常,并且我想将 Microsoft 的 Logger 与 Serilog 一起使用,但我似乎无法弄清楚如何在没有此错误的情况下将其 DI 到服务中 dotnet build.

我不确定我缺少什么让 ILogger 使用 Serilog 的实例?

错误dotnet build

[13:56:21 FTL] Host terminated unexpectedly
System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'App.Services.MyService'.) 
Run Code Online (Sandbox Code Playgroud)

服务依赖注入:

[13:56:21 FTL] Host terminated unexpectedly
System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Unable to resolve …
Run Code Online (Sandbox Code Playgroud)

c# serilog .net-core asp.net-core

3
推荐指数
1
解决办法
2589
查看次数

是否可以在 serilog 中更改颜色?

我刚刚在我的 dot net core 项目中集成了 Serilog。它运行得非常好,但我使用了一个黑暗的主题,有些日志真的很难阅读。举个例子:

在此处输入图片说明

这就是我初始化 Serilog 的方式:

string environment =  Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        
LoggerConfiguration loggerConfig = new LoggerConfiguration();
            
if (environment == "Production")
    loggerConfig.MinimumLevel.Information();
                
loggerConfig.MinimumLevel.Override("Microsoft.AspNetCore",
    LogEventLevel.Warning) 
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .WriteTo.File("Logs/app.log");
Run Code Online (Sandbox Code Playgroud)

有什么办法可以改变颜色,使黑色原木变白吗?

.net logging themes serilog .net-core

3
推荐指数
1
解决办法
3172
查看次数

获取没有 DI 的 Serilog 记录器的实例

我有一个没有依赖注入的控制台应用程序,它使用 log4net。我正在尝试用 Serilog 替换 log4net。

这与 log4net 的设置方式很接近:

using log4net;
using log4net.Config;
using System;
using System.IO;
using System.Reflection;

namespace LoggingDemo.Log4Net
{
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));
        static void Main(string[] args)
        {
            var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
            log.Debug("Starting up");
            log.Debug("Shutting down");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在其他类中,通过设置获取记录器 private static readonly ILog log = LogManager.GetLogger(typeof(Program));

Serilog 设置如下:

using Serilog;
using System;

namespace LoggingDemo.Serilog
{
    class Program
    {
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration() …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 serilog

3
推荐指数
1
解决办法
587
查看次数

如何防止 Serilog 将每一个小步骤自动记录为信息?

我想将 Serilog 用于我的 .Net 5 Web Api 项目。我安装了软件包

  • Serilog.AspNetCore v4.1.0
  • Serilog.Sinks.Console v4.0.0

并将 Program.cs 文件更改为

public sealed class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .CreateLogger();
        
        CreateHostBuilder(args)
            .Build()
            .Run();
    }

    private static IHostBuilder CreateHostBuilder(string[] args) 
        => Host
            .CreateDefaultBuilder(args)
            .UseSerilog()
            .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个用于测试目的的控制器

[ApiController]
[Route("[controller]")]
public sealed class TodosController : ControllerBase
{
    [HttpGet("{todoId:Guid}")]
    public IActionResult GetTodoById(Guid todoId) => Ok(todoId);
}
Run Code Online (Sandbox Code Playgroud)

使用此端点后,我可以在控制台中看到以下内容

[22:30:11 INF] Now listening on: https://localhost:5001
[22:30:11 INF] Now listening …
Run Code Online (Sandbox Code Playgroud)

c# serilog

3
推荐指数
2
解决办法
52
查看次数