SerilogFactory 不记录我的消息,但它记录异常
SerilogFactory don't log my messages but it logs exceptions
我想使用SerilogFactory,LogFactory在初始化AppHost之前被初始化。
这是我的 startup.cs :
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
var logger = new LoggerConfiguration().WriteTo.File("log.txt").CreateLogger();
LogManager.LogFactory = new SerilogFactory(logger);
app.Map("/api", api =>
{
api.UseServiceStack(new AppHost(env.ApplicationName, Configuration));
});
}
}
这是我的示例服务:
public class TestService : ServiceStack.Service
{
public static ILog Log = LogManager.GetLogger(typeof(TestService));
public bool Get(GetTest request)
{
Log.Info("foo");
Log.Warn("???");
throw new System.Exception("plop");
return true;
}
}
调用 "GetTest" 请求后,我可以在我的 "log.txt" 文件中看到异常的详细信息,但我看不到信息 "foo" 或 Warm“?? ?”在文件中。
2019-07-03 18:07:55.597 +02:00 [INF] Initializing Application Tmpi.PocketTournee took 352.2006ms. No errors detected.
2019-07-03 18:08:07.446 +02:00 [ERR] ServiceBase<TRequest>::Service Exception
System.Exception: plop
at Tmpi.PocketTournee.ServiceInterface.TestService.Get(GetTest request) in C:\Projects\VS2017\PocketTournee\WebService\Sources\Tmpi.PocketTournee.ServiceInterface\TestService.cs:line 15
如果我在初始化 AppHost 之后初始化 LogFactory,我可以看到我自己的日志,但是这次异常详细信息和服务堆栈初始化信息已经消失了:
2019-07-03 18:25:05.420 +02:00 [INF] foo
2019-07-03 18:25:05.434 +02:00 [WRN] ???
所以我设置了一些断点来观察 LogManager.LogFactory 的类型:
在注册第一个 LogFactory 之前 LogManager.LogFactory 的类型是 ServiceStack.Logging.NullLogFactory
*注册第一个LogFactory后LogManager.LogFactory的类型当然是ServiceStack.Logging.Serilog.SerilogFactory这里没问题
*但在 AppHost 初始化后 LogManager.LogFactory 的类型恢复为 ServiceStack.NetCore.NetCoreLogFactory
就像这段代码:
var logFactory = new SerilogFactory(new LoggerConfiguration()
.WriteTo.File("log.txt")
.CreateLogger());
// Here LogManager.LogFactory is {ServiceStack.Logging.NullLogFactory}
LogManager.LogFactory = logFactory;
// Here LogManager.LogFactory is {ServiceStack.Logging.Serilog.SerilogFactory}
app.Map("/api", api =>
{
api.UseServiceStack(new AppHost(env.ApplicationName, Configuration));
});
// Here LogManager.LogFactory is {ServiceStack.NetCore.NetCoreLogFactory}
LogManager.LogFactory = logFactory;
我想使用SerilogFactory,LogFactory在初始化AppHost之前被初始化。 这是我的 startup.cs :
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
var logger = new LoggerConfiguration().WriteTo.File("log.txt").CreateLogger();
LogManager.LogFactory = new SerilogFactory(logger);
app.Map("/api", api =>
{
api.UseServiceStack(new AppHost(env.ApplicationName, Configuration));
});
}
}
这是我的示例服务:
public class TestService : ServiceStack.Service
{
public static ILog Log = LogManager.GetLogger(typeof(TestService));
public bool Get(GetTest request)
{
Log.Info("foo");
Log.Warn("???");
throw new System.Exception("plop");
return true;
}
}
调用 "GetTest" 请求后,我可以在我的 "log.txt" 文件中看到异常的详细信息,但我看不到信息 "foo" 或 Warm“?? ?”在文件中。
2019-07-03 18:07:55.597 +02:00 [INF] Initializing Application Tmpi.PocketTournee took 352.2006ms. No errors detected.
2019-07-03 18:08:07.446 +02:00 [ERR] ServiceBase<TRequest>::Service Exception
System.Exception: plop
at Tmpi.PocketTournee.ServiceInterface.TestService.Get(GetTest request) in C:\Projects\VS2017\PocketTournee\WebService\Sources\Tmpi.PocketTournee.ServiceInterface\TestService.cs:line 15
如果我在初始化 AppHost 之后初始化 LogFactory,我可以看到我自己的日志,但是这次异常详细信息和服务堆栈初始化信息已经消失了:
2019-07-03 18:25:05.420 +02:00 [INF] foo
2019-07-03 18:25:05.434 +02:00 [WRN] ???
所以我设置了一些断点来观察 LogManager.LogFactory 的类型:
在注册第一个 LogFactory 之前 LogManager.LogFactory 的类型是 ServiceStack.Logging.NullLogFactory
*注册第一个LogFactory后LogManager.LogFactory的类型当然是ServiceStack.Logging.Serilog.SerilogFactory这里没问题
*但在 AppHost 初始化后 LogManager.LogFactory 的类型恢复为 ServiceStack.NetCore.NetCoreLogFactory
就像这段代码:
var logFactory = new SerilogFactory(new LoggerConfiguration()
.WriteTo.File("log.txt")
.CreateLogger());
// Here LogManager.LogFactory is {ServiceStack.Logging.NullLogFactory}
LogManager.LogFactory = logFactory;
// Here LogManager.LogFactory is {ServiceStack.Logging.Serilog.SerilogFactory}
app.Map("/api", api =>
{
api.UseServiceStack(new AppHost(env.ApplicationName, Configuration));
});
// Here LogManager.LogFactory is {ServiceStack.NetCore.NetCoreLogFactory}
LogManager.LogFactory = logFactory;