我使用.net core 2.1.5在asp.net MVC中创建了一个Web应用程序。 这是我在Startup.cs文件中为Serilog创建的唯一配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
loggerFactory.AddSerilog();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer(
connectionString: Configuration.GetSection("SqlServerConnectionString").Get<string>(),
tableName: "Logs",
restrictedToMinimumLevel: LogEventLevel.Verbose,
columnOptions: new ColumnOptions()
)
.CreateLogger();
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<MyDbContext>();
context.Database.Migrate();
context.Database.EnsureCreated();
}
}
我手动创建了Logs表,并为此创建了一个单独的迁移。 Logs实体如下所示:
public class Logs
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Message { get; set; }
public string MessageTemplate { get; set; }
[MaxLength(128)]
public string Level { get; set; }
[Required]
public DateTime TimeStamp { get; set; }
public string Exception { get; set; }
public string Properties { get; set; }
}
使用记录器的示例:
public class HomeController : Controller
{
readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public async Task<IActionResult> Index()
{
var obj = new { blah = "test12345", blah2 = "fsdf" };
_logger.LogInformation("sadfsadfsadf",obj);
return View();
}
}
当我在localhost中运行应用程序时,记录器会工作-我可以在“日志”表中看到日志。但是,在将应用程序部署到生产环境(Azure和其他基于IIS的托管平台)后,我可以看到Logs表已创建,但始终为空。即使我执行了“主页/索引”操作,也不会出现异常,什么也不会发生。有什么想法我做错了什么,为什么该应用程序没有在数据库中创建日志?
答案 0 :(得分:1)
好,所以我终于找到了解决方法。 Azure的解决方案是在Azure的Environment Variable
部分中添加一个值为Development
的{{1}}。对于廉价的托管平台,我必须添加一个Application Settings
文件:
web.config
到.Web项目的根目录,因为它基于IIS。我根据this article解决了这个问题
真的不喜欢添加<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout"
hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
文件的解决方案,因为在CD管道中(例如具有所有应用程序设置的JSON文件)进行管理并不是那么简单。
答案 1 :(得分:0)
您的SqlServerConnectionString是否正确?在Startup.cs中构建Web主机时,还请确保调用UseSerilog()。可能仅在开发环境中添加它。
答案 2 :(得分:0)
可能是您忘记了在应用程序启动时在In[1]: from xbbg import blp
In[2]: blp.bdp('XS1627599654 Corp', 'RTG_SP')
Out[2]:
ticker field value
0 XS1627599654 Corp RTG_SP B
In[3]: blp.bdp('XS1627599654 Corp', 'RTG_SP', Rating_As_Of_Date_override='20180201')
Out[3]:
ticker field value
0 USG4863AAC20 Corp RTG_SP BB+
类中调用SeriLog
的原因。因此,请尝试以下操作:
Program