我想知道是否有办法禁用自动日志记录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) 我正在尝试新的 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) 我得到以下异常:
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) 这是一个使用 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) 我尝试使用 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) 我正在尝试使用 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) 我是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) 我需要将 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”,因为它正被另一个进程使用。
谁可以帮我这个事
我正在尝试使用 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# …
我正在使用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)