Serilog 仅将来自 Main() 的消息记录到 .NET Framework 中的 Loggly
Serilog only logs messages from Main() into Loggly, in .NET Framework
我有一个用 .NET Framework 4.7.2 编写的应用程序,我们使用 Serilog 将消息记录到 Loggly。
我无法弄清楚的问题是它只记录来自 Main() 方法的消息,而不记录来自下面其他方法的消息(或者它可能只记录最开始的消息) .
即我有一个代码:
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration().ReadFrom.AppSettings().Enrich.FromLogContext().WriteTo.Loggly(
logglyConfig: new LogglyConfiguration
{
ApplicationName = ConfigurationManager.AppSettings["Loggly.ApplicationName"],
CustomerToken = ConfigurationManager.AppSettings["Loggly.CustomerToken"],
Tags = ConfigurationManager.AppSettings["Loggly.Tags"].Split(',').ToList(),
EndpointHostName = "xxx.loggly.com",
EndpointPort = 443,
IsEnabled = true,
LogTransport = TransportProtocol.Https,
ThrowExceptions = false,
OmitTimestamp = false
}).CreateLogger();
Log.Information($"[{nameof(Program)}] Starting...");
Execute();
}
public static void Execute()
{
Log.Information($"Executing [{nameof(Program)}] ...");
*... some processing code here ...*
Print();
}
public static void Print()
{
Log.Information($"Printing Data");
*... some printing code here ...*
}
但在 Loggly 中,我只得到第一个日志(“Starting...”),以及 none 其他日志(正在执行”和“打印”)。
关于这里有什么问题或我遗漏了什么有什么想法吗?
像 Loggly 接收器这样的接收器在后台线程上发送消息。如果您的应用程序在后台线程能够发送消息之前结束,它们就会丢失,这很可能是您的情况...
您有责任在应用程序结束前刷新日志。参见 Lifecycle of Loggers。
您可以通过调用 Log.CloseAndFlush()
或处理您的记录器来做到这一点。
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
// ...
.CreateLogger();
try
{
// ...
}
finally
{
Log.CloseAndFlush(); // <##<##<##<##<##<##
}
}
我有一个用 .NET Framework 4.7.2 编写的应用程序,我们使用 Serilog 将消息记录到 Loggly。
我无法弄清楚的问题是它只记录来自 Main() 方法的消息,而不记录来自下面其他方法的消息(或者它可能只记录最开始的消息) .
即我有一个代码:
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration().ReadFrom.AppSettings().Enrich.FromLogContext().WriteTo.Loggly(
logglyConfig: new LogglyConfiguration
{
ApplicationName = ConfigurationManager.AppSettings["Loggly.ApplicationName"],
CustomerToken = ConfigurationManager.AppSettings["Loggly.CustomerToken"],
Tags = ConfigurationManager.AppSettings["Loggly.Tags"].Split(',').ToList(),
EndpointHostName = "xxx.loggly.com",
EndpointPort = 443,
IsEnabled = true,
LogTransport = TransportProtocol.Https,
ThrowExceptions = false,
OmitTimestamp = false
}).CreateLogger();
Log.Information($"[{nameof(Program)}] Starting...");
Execute();
}
public static void Execute()
{
Log.Information($"Executing [{nameof(Program)}] ...");
*... some processing code here ...*
Print();
}
public static void Print()
{
Log.Information($"Printing Data");
*... some printing code here ...*
}
但在 Loggly 中,我只得到第一个日志(“Starting...”),以及 none 其他日志(正在执行”和“打印”)。
关于这里有什么问题或我遗漏了什么有什么想法吗?
像 Loggly 接收器这样的接收器在后台线程上发送消息。如果您的应用程序在后台线程能够发送消息之前结束,它们就会丢失,这很可能是您的情况...
您有责任在应用程序结束前刷新日志。参见 Lifecycle of Loggers。
您可以通过调用 Log.CloseAndFlush()
或处理您的记录器来做到这一点。
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
// ...
.CreateLogger();
try
{
// ...
}
finally
{
Log.CloseAndFlush(); // <##<##<##<##<##<##
}
}