我在Setup.cs 文件中有这段代码
protected override MvxLogProviderType GetDefaultLogProviderType() =>
MvxLogProviderType.Serilog;
protected override IMvxLogProvider CreateLogProvider()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File("C:\\log.txt"))
.CreateLogger();
return base.CreateLogProvider();
}
Run Code Online (Sandbox Code Playgroud)
在 ViewModel 中,我有:通过 IoC 初始化的私有只读 IMvxLog _log。
当我调用 _log.Error("Some error") 时,log.txt 文件中没有写入任何内容。
我最初使用 Serilog 的一个日志文件,这是我通过这样做完成的
var slc = new SerilogSubLoggerConfiguration();
configuration.GetSection("Serilog:SubLogger").Bind(slc);
Run Code Online (Sandbox Code Playgroud)
然后在Program.cs的Main方法中配置SubLogger
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.WriteTo.Logger(logger => logger.Filter.
ByIncludingOnly(lvl => lvl.Level == slc.Level).WriteTo.RollingFile(slc..PathFormat))
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我已转而使用现在在 appsettings 文件中定义的三个单独的日志。这将创建具有一个属性的类,即一系列 Serilog 配置
public class SerilogSubLoggerConfigurations
{
public List<SerilogSubLoggerConfiguration> SubLoggers { get; set; }
}
var slcs = configuration.GetSection("Serilog").Get<SerilogSubLoggerConfigurations>();
Run Code Online (Sandbox Code Playgroud)
现在我有了 SubLogger 配置列表,我需要创建记录器并添加所有这些子记录器。每个 SubLogger 都需要自己的
.WriteTo.Logger(logger => logger.Filter.
ByIncludingOnly(lvl => lvl.Level == slc.Level).WriteTo.RollingFile(slc..PathFormat))
Run Code Online (Sandbox Code Playgroud)
Log.Logger 调用中的行,因此我需要迭代 SubLoggers。我的目的是写一个方法来做到这一点。
public static LoggerConfiguration GetLoggerConfiguration(IConfiguration config, SerilogSubLoggerConfigurations slcs)
{
var lc = new LoggerConfiguration();
lc.ReadFrom.Configuration(config);
foreach (var cfg in slcs.SubLoggers) …Run Code Online (Sandbox Code Playgroud) 我使用 Serilog 登录 Asp.net core Web api。我将其配置为使用 SQL 接收器,并且它使用 XML 形式的属性列数据在日志表中进行日志记录。
如何配置 Serilog 将属性列数据记录为 JSON 而不是 XML?
以下是我的 appsettings.json 文件内容。我安装了 Serilog.Formatting.Compact 包并在 appsettings.json 中添加了格式化程序设置。但 Properties 列数据仍然是 XML 格式。
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
"tableName": "Log"
}
}
]
}
Run Code Online (Sandbox Code Playgroud) 对于使用应用程序配置的 Serilog 日志丰富,我如何添加标准丰富器,例如 ProcessId、ThreadId、MachineName?添加属性丰富器的语法如下,但我尝试使用上述标准丰富器。有一个选项可以实现应用程序 json,我想避免它,因为它需要 Serilog 2.6。有什么想法可以做到这一点吗?
<add key="serilog:enrich:with-property:Version" value="1.0" />
Run Code Online (Sandbox Code Playgroud) 我在我的项目(MVC/web api 等)中使用 serilog & SEQ 和 Autofac (DI)。虽然它工作正常,但不确定这是正确的方法。
我有几个问题。请帮忙
Q1) 如何使 LoggerConfiguration 通过 Web.config (appsetting) 进行管理,例如 Verbose/Debug 等。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.FromLogContext()
.WriteTo.Seq(serilogUrl)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
Q2)对于Everymessage,我想写userid。我已经使用了推送属性,但没有“使用”语句。见下面的代码
public partial class Repo : BaseRepo<db>
{
public Repo(ILogger logger) : base(logger)
{
var currentuser = GetUserName();
LogContext.PushProperty("User Name", currentuser);
Logger.ForContext<Repo>();
}
public void somefunction()
{
try{}
catch(exception e){
Logger.Error(e, "Message");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Q3)在构造函数中,我使用了 Logger.ForContext(),假设这会将类名写入每条消息。但它不起作用。
Logger.ForContext<Repo>()
Run Code Online (Sandbox Code Playgroud)
注意:我没有使用asp.net core/.Net core
我目前正在开发 ASP.NET Core 2.1 应用程序,并使用 Serilog 进行日志记录。我想在运行时为我的 Serilog 实现重新加载应用程序设置文件。
我的目标是在运行时更改日志级别,例如我写入最小级别调试而不是信息,然后保存文件。我想触发设置的实时重新加载。我的appsettings.json看起来像这样:
{
"serilog": {
"using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
"minimumLevel": "Information",
"writeTo": [
{
"name": "File",
"args": {
"fileSizeLimitBytes": 256000000,
"retainedFileCountLimit": 62,
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
},
{
"name": "Console",
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Program.cs中,我使用 flag 加载设置reloadOnChange: true。
public class Program
{
public static readonly ServiceSettings Settings = new ServiceSettings();
public static void Main(string[] args)
{
//...
}
public static IWebHostBuilder …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用https://github.com/serilog/serilog-settings-configuration来读取应用程序设置并设置 serilog 以获取应用程序见解: https: //github.com/serilog/serilog-sinks-applicationinsights。我遇到的问题是我无法设置 ApplicationInsightsEvents 调用的最后一个参数,该调用是一个接受 LogEvent 并返回 ITelemetry 的函数。如何通过 appsettings.json 进行设置?
基本上,我想替换以下行: log.WriteTo.ApplicationInsightsEvents(instrumentationKey, level, CultureInfo.CurrentCulture, TelemetryConverter.ConvertLogEventsToEnerGovTelemetry);
appsettings.json 中有一行
谢谢。
configuration appsettings serilog azure-application-insights
我希望使用 Serilog 将结构化日志数据写入 Amazon S3 存储桶,然后使用 Databricks 进行分析。我以为 Serilog 会有一个 S3 接收器,但我发现我错了。我认为也许将文件接收器与其他东西一起使用可能是问题所在,但我不确定那会是什么样子。我想我可以在我的 EC2 实例上安装 S3 存储桶并写入数据,但我被告知这是有问题的。你们中的一位好人能给我指出正确的方向吗?
ILoggingBuilder' 不包含 'AddFile' 的定义,并且最佳扩展方法重载 'FileLoggerExtensions.AddFile(ILoggerFactory, IConfigurationSection)' 需要接收器类型为 'ILoggerFactory'
请注意代码中标有 的行<== Exception。
根据我可以在网上找到的所有内容,这应该可以工作,但是我收到了上面的错误。
我找不到任何可以表明问题所在的内容。
大概是什么蠢事。任何建议都非常感谢!
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace my.namespace
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddFile("..."); // <== Exception
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的 .NET Core 3.1 控制台应用程序中按如下方式配置 DI:
services.AddSingleton<ITelemetryInitializer, TelemetryInitializer>();
services.AddApplicationInsightsTelemetryWorkerService(instrumentationKey);
Run Code Online (Sandbox Code Playgroud)
在appSettings.json我有:
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.ApplicationInsights"
],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"restrictedToMinimumLevel": "Information",
"InstrumentationKey": "...",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights",
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
}
Run Code Online (Sandbox Code Playgroud)
Serilog 的配置如下:
Host.CreateDefaultBuilder(args)
.UseSerilog((hostingContext, loggerConfiguration) =>
loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
)
.UseConsoleLifetime()
.Build()
.Run()
Run Code Online (Sandbox Code Playgroud)
我的初始化类: …
serilog ×10
c# ×5
logging ×5
json ×3
.net-core ×2
amazon-s3 ×1
appsettings ×1
asp.net-core ×1
mvvmcross ×1
xamarin ×1