标签: serilog

如何将 Serilog 依赖注入到 .NET 控制台应用程序中的其余类中

我正在开始使用Serilog,但我不知道如何将 ILogger 依赖项注入到我的类中。如果我使用 ASP.NET Core 5,这很容易,但我使用的是 .NET Core 控制台应用程序。我怎样才能做类似的事情?

在使用 log4net 之前:

public class TestStrategy
{
    private static readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name);

    ...
}
Run Code Online (Sandbox Code Playgroud)

我的 Serilog 记录器创建:

var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我必须 DIlogger进入所有课程吗?

.net c# dependency-injection serilog .net-5

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

Serilog ASP.NET Core 的重复错误消息

使用 Serilog 的 ASP.NET Core 5 Razor 页面

UseStatusCodePagesWithReExecute 按预期工作,并在进入我的 /CustomError 页面后重新执行页面。

如何抑制对重新执行页面的第二次调用的 Serilog 日志记录?

密码-postgres完整示例

// program.cs
public static void Main(string[] args)
{
    Log.Logger = new LoggerConfiguration()
        // if only do warning, then will get duplicate error messages when an exception is thrown, then again when re-executed
        // we do get 2 error message per single error, but only 1 stack trace
        .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Fatal)
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .CreateLogger();

    try
    {
        Log.Information("Starting up");
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core razor-pages

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

没有看到 Serilog CloseAndFlush

刚刚进入 SeriLog。现在应该提到这是.Net 标准中的类库(即不是Core)。使用 SeriLog 2.10.0、Sinks.File 4.1.0 和 Sinks.MSSqlServer 5.6.0。

SQL Server 接收器出现问题,并意识到我没有像所有示例中所说的那样调用 CloseAndFlush。问题是它不可用,Intellisense 甚至不显示它。我的代码的关键部分,类构造函数和方法 GetCB: 在此输入图像描述

在此输入图像描述

那么为什么我没有看到 CloseAndflush 呢?稍后我会发布我的其他问题。:) 谢谢。

serilog

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

Serilog 未记录到 ElasticSearch 服务器并引发异常

我正在尝试开始登录 ElasticSearch,但在服务器中找不到日志,如果我启用诊断模式,则会引发异常:

这就是我的 Startup.cs 的样子:

            //ElasticSearch Logs
        Log.Logger = new LoggerConfiguration()
         .Enrich.FromLogContext()
         .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://myserver.com:9243/"))
         {
             ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "mypassword"),
             AutoRegisterTemplate = true,                 
         })
         .Enrich.FromLogContext()
         .WriteTo.Console()
        .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

以下是我的Program.cs

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

这就是我在控制器中的内容:

        _logger.LogError(new Exception("test"), "An error has occurred.");
        _logger.LogInformation("The {User} has just executed {Action}.", "username", "actionName");

        Log.Error("this is my first log");
Run Code Online (Sandbox Code Playgroud)

我得到的异常:

2021-08-19T21:09:15.2793348Z 无法创建模板。Elasticsearch.Net.ElasticsearchClientException:请求执行失败。调用:状态代码 400 来自:PUT /_template/serilog-events-template。ServerError:类型:mapper_parsing_Exception原因:“无法解析映射[_doc]:根映射定义具有不受支持的参数:[默认值:{dynamic_templates = [{numerics_in_fields = {match_pattern = regex,path_match = fields。[\ d …

elasticsearch kibana serilog asp.net-core

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

使用 Serilog 将此信息记录到其他文件中

我有一个带有 Serilog 块的 .NET 5.0 控制台应用程序。appsettings.json 的 serilog 部分如下所示:

"Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
"WriteTo": [
  {
    "Name": "Console",
    "Args": {
      "outputTemplate": "[{Timestamp:HH:mm:ss.fff} [{Level}] {SourceContext} {Message}{NewLine}{Exception}",
      "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console"
    }
  },
  {
    "Name": "File",
    "Args": {
      "path": "/Logs/SharedTreatment_logs.txt",
      "outputTemplate": "{Timestamp:G} {SourceContext} [{Level}] {Message}{NewLine:1}{Exception:1}",
      "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
      "fileSizeLimitBytes": 1000000,
      "rollOnFileSizeLimit": "true",
      "shared": "true",
      "flushToDiskInterval": 3
    }

  }
]
Run Code Online (Sandbox Code Playgroud)

它加载了以下代码:

    Serilog.Debugging.SelfLog.Enable(Console.Error);
    
                var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();
    
                var logger = loggerConfiguration.ReadFrom.Configuration(configuration).CreateLogger();
                
                Log.Logger = logger?.ForContext<T>() ?? throw new ArgumentNullException(nameof(logger));

Host.CreateDefaultBuilder(args).UseSerilog((hostingContext, …
Run Code Online (Sandbox Code Playgroud)

.net c# serilog

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

Serilog Enrichers 不登录到控制台 (.Net 6.0)

使用(.Net 6.0)我试图输出一些额外的默认信息与所有日志当我输出到控制台时我看不到属性,但是如果我启用 Json 并输出到文件它一切正常,想知道你是否有任何线索?

public class Program
{
    public static int Main(string[] args)
    {

        var builder = WebApplication.CreateBuilder(args);

        Log.Logger = new LoggerConfiguration()
            //.WriteTo.File(new Serilog.Formatting.Json.JsonFormatter(), "Logs/log-.txt", fileSizeLimitBytes: 5242880, rollOnFileSizeLimit: true, rollingInterval: RollingInterval.Day, shared: true)
            .Enrich.FromLogContext()
            .Enrich.WithProcessId()
            .Enrich.WithProcessName()
            .Enrich.WithProperty("Prop1", "ABC123")
            .Enrich.WithProperty("Prop2", "1.00")
            .Enrich.WithProperty("PID", Process.GetCurrentProcess().Id)
            .WriteTo.Console()
            .CreateLogger();


        builder.Host.UseSerilog(); 

        // Add services to the container.

        var app = builder.Build();

        // Configure the HTTP request pipeline.
    
        app.MapGet("/weatherforecast", () =>
        {
            Log.Information("Hello....");
            return forecast;
        });

        try
        {
            app.Run();
        }
        catch (Exception ex)
        {
            ex.ToString();
        }
        finally …
Run Code Online (Sandbox Code Playgroud)

.net c# console serilog

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

ASP.NET Core Web API - 如何解决 Serilog 和 Microsoft.Extensions.Logging 之间的冲突

在我的 ASP.NET Core-6 Web API 中,我安装了 Serilog。我从未安装过 Microsoft.Extensions.Logging

但令我惊讶的是,当我想使用以下方式引用 Serilog 时:

using ILogger = Serilog.ILogger;

public class AuthController : BaseApiController
{
    private readonly ILogger<AuthController> _logger;
    private IAuthService _authService;

    public AuthController(ILogger<AuthController> logger, IAuthService authService)
    {
        _logger = logger;
        _authService = authService;
    }
}
Run Code Online (Sandbox Code Playgroud)

ILogger自动检测Microsoft.Extensions.Logging,我无法更改为Serilog。

我该如何解决这个问题?

谢谢

c# asp.net-web-api serilog

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

在配置准备好之前配置Serilog?

我有一个 Web api (.NET Core 3.1),它使用 Serilog 进行日志记录。Serilog很早就被添加到了IWebHostBuilder

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
    return WebHost
        .CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseSerilog((context, configuration) =>
        {
            if (context.HostingEnvironment.IsDevelopment())
            {
                configuration.WriteTo.Console(LogEventLevel.Debug);
                return;
            }

            configuration.WriteTo.ApplicationInsights(TelemetryConverter.Traces, LogEventLevel.Error);
        });
}
Run Code Online (Sandbox Code Playgroud)

这意味着(据我所知)我此时需要已经配置了记录器。所以这是我主要做的第一件事:

public static int Main(string[] args)
{
    Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(Configuration)
        .CreateLogger();

    var host = CreateWebHostBuilder(args).Build();
    host.Run();
}
Run Code Online (Sandbox Code Playgroud)

但该线路.ReadFrom.Configuration(Configuration)需要进行配置。StartUp这通常是在此时尚未运行的(同样,afaik)中完成的。显然我可以LoggerConfiguration稍后移动,但.UseSerilog会在配置之前调用。

IConfugration那么,当我还没有设置Serilog 时,如何配置它呢?

.net c# configuration serilog

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

Serilog 不将日志发送到 Elasticsearch 8

我使用ELK堆栈来记录应用程序错误,但Serilog不会记录到elasticsearch

\n

使用的elasticsearch版本是8.3.2

\n

日志配置program.cs

\n
builder.UseSerilog((hostBuilder, serviceProvider, loggerConfiguration) =>\n{\n    var appSettings = hostBuilder.Configuration.GetSection(nameof(AppSettings)).Get<AppSettings>();\n\n    CreateBasicLoggerConfiguration(loggerConfiguration)\n        .WriteTo.File(logPath, rollingInterval: RollingInterval.Hour)\n        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(appSettings.ElasticsearchSettings.Uri))\n        {\n            IndexFormat = $"\xd9\x8eapp-logs-{environment.EnvironmentName.Replace(".","-")}-{DateTimeOffset.Now.LocalDateTime:yyyy-MM}",\n            AutoRegisterTemplate = true\n        });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

并且,elasticsearch设置为appsettings.json

\n
"ElasticsearchSettings": {\n  "Uri" : "http://localhost:9200"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

添加并使用了以下软件包:

\n
<PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />\n<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="1.1.4" />\n<PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" />\n<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.4.1" />\n
Run Code Online (Sandbox Code Playgroud)\n

一切看起来都正常,但是没有登录到elastichsearch。

\n

c# elasticsearch serilog asp.net-core

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

Visual Studio 是否根据日志级别输出窗口颜色消息?

在 Visual Studio 中运行应用程序时,我喜欢在控制台窗口中显示彩色消息。但是输出窗口中是否也可以显示颜色?现在都是单色的。

visual-studio serilog

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