标签: serilog

如何在 ASP.NET Core 中使用 Serilog 禁用自动日志记录

我想知道是否有办法禁用自动日志记录Serilog

我安装了它并sink使用 MSSqlServer 来处理日志记录。

appsettings.json

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Server=tcp:{ServerAddress};Initial Catalog={DBName};Persist Security Info=False;User ID={Username};Password={Password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
          "sinkOptionsSection": {
            "tableName": "App_Logs",
            "autoCreateSqlTable": true
          }
        }
      }
    ]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  // ...other configs
}
Run Code Online (Sandbox Code Playgroud)

那么这是我的配置Progam.cs

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": …
Run Code Online (Sandbox Code Playgroud)

sql-server serilog asp.net-core

2
推荐指数
1
解决办法
9383
查看次数

Serilog 记录器正在复制每个日志行

我正在尝试新的 Azure v12 SDK 并使用 Serilog 将项目记录到控制台(它是一个 .Net 5 控制台应用程序)

每个 Log.Logger 行都在控制台上复制自身,但不在日志文件中。我试图找出为什么会发生这种情况。

控制台截图 控制台日志记录

日志文件截图 日志文件记录

这是我在 Program.cs 中的 Serilog 设置

private static IHost AppStartup(string logFilepath)
    {
        var builder = new ConfigurationBuilder();
        ConfigSetup(builder);

        // defining Serilog configs
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(builder.Build())
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .WriteTo.Seq("https://localhost:5341/")
            .WriteTo.File(logFilepath, rollingInterval: RollingInterval.Day)
            .CreateLogger();

        // Initiated the dependency injection container 
        var host = Host.CreateDefaultBuilder()
            .ConfigureServices((context, services) => {
                services.AddLogging(m => m.AddSerilog(Log.Logger));
                services.AddTransient<IAzureService, AzureService.AzureService>();
                services.AddTransient<BlobServiceManager>();
            }).Build();
        //this line is duplicating as well!
        Log.Logger.Information($"{DateTime.Now}: Serilog logger created for …
Run Code Online (Sandbox Code Playgroud)

c# serilog

2
推荐指数
1
解决办法
2060
查看次数

CreateLogger() 之前被调用过,并且只能调用一次

我得到以下异常:

CreateLogger() 之前被调用过,并且只能调用一次。

不知道什么时候CreateLogger()被叫了两次。

我的配置是这样的:

   public static void Main(string[] args)
        {
            try
            {
                var host = CreateHostBuilder(args).Build();
                Log.Information("Starting host...");
                host.Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly."); //HERE IS THE EXCEPTION: CreateLogger() was previously called and can only be called once.
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

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

我在被调用库中的扩展方法:

  public static void Configure(this LoggerConfiguration loggerConfig,
        IServiceProvider provider, …
Run Code Online (Sandbox Code Playgroud)

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

2
推荐指数
1
解决办法
2057
查看次数

Serilog WriteTo.Email() 失败

这是一个使用 Serilog.Sinks.Email 2.4.0 的 .Net Core 6 控制台应用程序。在同一个项目中,我引用了 MailKit 3.1.0 Nuget 包。我注意到 Serilog.Sinks.Email 还引用了 Mailkit 3.1.0。

我正在像这样配置记录器。我的目标是让 Serilog 在调用 Log.Fatal() 时发送电子邮件:

.WriteTo.Email(  
    new EmailConnectionInfo()
    {
        FromEmail = _appSettings.EmailFrom,
        ToEmail = _appSettings.EmailToOnError,
        MailServer = _appSettings.EmailHost,
        EmailSubject = $"Runtime error starting {_appSettings.ApplicationName}",
        ServerCertificateValidationCallback = (s, c, h, e) => true
    },
    restrictedToMinimumLevel: LogEventLevel.Fatal);
Run Code Online (Sandbox Code Playgroud)

我将 Serilog 消息记录到调试输出窗口,如下所示,这样我就可以看到 Serilog 本来(按设计)吞咽的错误消息:

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
Run Code Online (Sandbox Code Playgroud)

当我调用 Log.Fatal(),然后立即调用 Log.CloseAndFlush(),并查看“调试输出”窗口时,我可以看到 Serilog 尝试向我发送电子邮件,但失败了,说它找不到 MailKit 方法.MailTransport.SendAsync()。知道我缺少什么吗?以下是调试输出窗口中的完整错误消息:

Exception while emitting periodic batch from 
Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink: System.MissingMethodException: 
Method not found: 'System.Threading.Tasks.Task 
MailKit.MailTransport.SendAsync(MimeKit.MimeMessage, System.Threading.CancellationToken, …
Run Code Online (Sandbox Code Playgroud)

c# serilog mailkit .net-core .net-6.0

2
推荐指数
1
解决办法
1898
查看次数

net 6.0 应用程序:尝试登录 Azure Application Insights 时启动时出现 Serilog 异常

我尝试使用 Serilog 从 dotnet 6.0 控制台应用程序登录到控制台和 Azure 应用程序见解。我正在从 appsettings.json 文件加载配置。

但是,在启动时,我收到异常:

An unhandled exception of type 'System.InvalidOperationException' occurred in Serilog.Settings.Configuration.dll: 'Type Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights was not found.'
   at Serilog.Settings.Configuration.StringArgumentValue.ConvertTo(Type toType, ResolutionContext resolutionContext)
   at Serilog.Settings.Configuration.ConfigurationReader.<>c__DisplayClass21_2.<CallConfigurationMethods>b__3(<>f__AnonymousType9`2 <>h__TransparentIdentifier0)
   at System.Linq.Utilities.<>c__DisplayClass2_0`3.<CombineSelectors>b__0(TSource x)
   at System.Linq.Enumerable.SelectListPartitionIterator`2.ToList()
   at Serilog.Settings.Configuration.ConfigurationReader.CallConfigurationMethods(ILookup`2 methods, IList`1 configurationMethods, Object receiver)
   at Serilog.Settings.Configuration.ConfigurationReader.Configure(LoggerConfiguration loggerConfiguration)
   at Serilog.Configuration.LoggerSettingsConfiguration.Settings(ILoggerSettings settings)
Run Code Online (Sandbox Code Playgroud)

我从 Serilog 网站和其他地方的各种示例中选取了代码。谁能看到我的代码有什么问题吗?

我这里有一个示例程序,可以构建和演示遇到的问题:

https://github.com/ossentoo/testlogger

程序.cs

// See https://aka.ms/new-console-template for more information
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;

IServiceProvider _serviceProvider;
ILogger<Program> _logger;


Console.WriteLine("Hello, World!");

var config …
Run Code Online (Sandbox Code Playgroud)

c# serilog azure-application-insights

2
推荐指数
1
解决办法
1315
查看次数

Serilog 无法登录我的本地数据库

我正在尝试使用 Serilog 登录我的 .NET 项目,但我注意到错误没有写入数据库。我打开 Serilog 的 SelfLog,这是显示的错误:

2022-11-01T15:58:26.9744639Z Unable to write 1 log events to the database due to following error: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)

这是我在 Program.cs 中对 Serilog 的设置:

var columnOptions = new ColumnOptions();
        columnOptions.Store.Remove(StandardColumn.Properties);
        columnOptions.Store.Remove(StandardColumn.MessageTemplate);
        columnOptions.TimeStamp.NonClusteredIndex = true;
Log.Logger = new LoggerConfiguration()
                    .ReadFrom.Configuration(Config)
                    .Enrich.FromLogContext()
                    .Enrich.WithExceptionDetails()
                    .WriteTo.Console() …
Run Code Online (Sandbox Code Playgroud)

c# database asp.net logging serilog

2
推荐指数
1
解决办法
1317
查看次数

Serilog是记录类型而不是对象内容

我是Serilog的新手,请尝试一下是否有帮助。我正在使用Serilog v2和Serilog.Sinks.MsSqlServer v5

我有以下控制台应用程序代码:

static void Main(string[] args)
    {
        var logger = CreateLogger();

        var employee = new Person()
        {
            Name = "Rob",
            Age = 45
        };

        logger.Debug("Employee details {Employee}", employee);

        Console.ReadKey();

    }

private static ILogger CreateLogger()
    {

        string levelString = SSOSettingsFileManager.SSOSettingsFileReader.ReadString(
                            "LCC.Common", "Serilog.MinimumLevel");

        SerilogLevel level = (SerilogLevel)Enum.Parse(typeof(SerilogLevel), levelString);

        string conString = SSOSettingsFileManager.SSOSettingsFileReader.ReadString(
                            "LCC.Common", "Serilog.ConnectionString");

        var levelSwitch = new LoggingLevelSwitch();
        levelSwitch.MinimumLevel = (Serilog.Events.LogEventLevel)level;

        return new LoggerConfiguration()
            .MinimumLevel.ControlledBy(levelSwitch)
            .WriteTo.MSSqlServer(connectionString: conString, tableName: "Logs", autoCreateSqlTable: true)
            .CreateLogger();
    }
Run Code Online (Sandbox Code Playgroud)

我希望可以记录到Person的详细信息,即Name Rob和Age45。但是,我发现以下记录到Sql Server Sink的Properties列中:

<properties><property key='Employee'>ConsoleApplication1.Person</property></properties> …
Run Code Online (Sandbox Code Playgroud)

c# logging serilog

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

Serilog SelfLog 到文件错误

我需要将 seri 记录器的自我日志启用到文本文件。我的配置如下;

__serilogLogger = new LoggerConfiguration()
      .Enrich.WithProperty("ApplicationIPv4", _ipv4)
      .Enrich.WithProperty("ApplicationIPv6", _ipv6)
      .WriteTo.MSSqlServer(connectionString, tableName /*, columnOptions: columnOptions*/)
      .WriteTo
      .Seq(ConfigurationManager.AppSettings["SerilogServer"])
      .CreateLogger();

      var file = File.CreateText("Self.log");
      Serilog.Debugging.SelfLog.Enable(TextWriter.Synchronized(file));
Run Code Online (Sandbox Code Playgroud)

但是在运行应用程序时文件访问错误是怎么回事。请在下面找到错误详细信息;

附加信息:该进程无法访问文件“C:\Program Files (x86)\IIS Express\Self.log”,因为它正被另一个进程使用。

谁可以帮我这个事

c# asp.net-web-api2 serilog

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

Serilog 没有写入 MsSql 服务器数据库,也没有显示任何错误

我正在尝试使用 serilog 将日志写入 MsSql 服务器。我的应用程序是 .Net Core 2.1 控制台应用程序。我正在使用 Serilog MsSql sink

我使用以下 sql 命令创建了一个表

CREATE TABLE [Logs] (

   [Id] int IDENTITY(1,1) NOT NULL,
   [Message] nvarchar(max) NULL,
   [MessageTemplate] nvarchar(max) NULL,
   [Level] nvarchar(128) NULL,
   [TimeStamp] datetimeoffset(7) NOT NULL,  -- use datetime for SQL Server pre-2008
   [Exception] nvarchar(max) NULL,
   [Properties] xml NULL

   CONSTRAINT [PK_Logs] 
     PRIMARY KEY CLUSTERED ([Id] ASC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
           ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
     ON [PRIMARY]

) ON [PRIMARY];
Run Code Online (Sandbox Code Playgroud)

我的 C# …

c# serilog asp.net-core-2.1

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

为Serilog创建包装

我正在使用Serilog。为了避免在每个微服务中进行配置,我创建了一个扩展名为的私有NuGet包,例如

namespace DFX.Logging
{
    public static class Extensions
    {
        public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>
            webHostBuilder.UseSerilog((context, loggerConfiguration) =>
            {
                var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");
                if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))
                {
                    level = LogEventLevel.Information;
                }

                loggerConfiguration.Enrich
                    .FromLogContext()
                    .MinimumLevel.Is(level);

                loggerConfiguration
                    .ReadFrom.Configuration(context.Configuration)
                    .WriteTo.Console(
                        theme: AnsiConsoleTheme.Code,
                        outputTemplate: "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制器(或其他地方)中创建记录器

private readonly ILogger _logger = Log.ForContext<Application>();
Run Code Online (Sandbox Code Playgroud)

为此,我需要使用添加using Serilog;。我想避免使用它,而只使用我的命名空间using DFX.Logging;。我该如何发财呢?到目前为止我尝试过的是:

namespace DFX.Logging
{
    // custom wrapper
    public static class Log
    {
        public static ILogger …
Run Code Online (Sandbox Code Playgroud)

c# casting serilog

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