我以为这很简单,但是几个小时后才意识到并非如此。我向C#.Net Core部署了“应用服务”到Azure。
我正在尝试通过使用Console.WriteLine(“我的消息”)或Trace.TraceError(“我的消息”)添加对应用程序的一些粗略监视,但我无法在Azure的任何地方找到该输出。
我尝试启用Application Insights,但也没有在其中找到输出。
我只是想以最简单的方式来弄清楚我的应用程序中的一行代码正受到攻击。最简单的方法是什么?
我尝试过的事情:1)我进入Azure的控制台,浏览到可能具有这种输出但找不到任何文件的每个文件。当然,LogFiles下的任何文件和文件夹中都没有任何内容。2)我直接去“应用服务日志”,并启用“应用日志(文件系统)”。3)我还启用了“应用程序服务日志”中的“详细错误消息”。4)我尝试了“诊断设置(预览)”,但在那里找不到输出。5)我在“日志流”中查看应用程序日志,但是那里什么也没有显示6)在“日志”下,我只收到以下消息:“我们没有找到任何日志”7)“ metrics”和“ Alerts”都没有此日志输出
我开始怀疑Azure中不支持此功能。我是否只需要一次添加诸如serilog的日志记录框架,一次向可能像“ You hit line 20”的应用程序添加一条语句?我真的只想要快速又脏的东西,但是花了几个小时之后,它的“快速”部分却没有发生。
是,仅.NET Core不支持this(控制台或跟踪输出)。您应按照以下步骤使用ILogger
。
在Startup.cs
-> Configure
方法中,重写如下的Configure方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//your other code
//add the following 2 lines of code.
loggerFactory.AddConsole();
loggerFactory.AddDebug();
app.UseStaticFiles();
//your other code
}
然后在HomeController.cs
中(例如,添加以下代码:
public class HomeController : Controller
{
private readonly ILogger _logger;
public HomeController(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<HomeController>();
}
public IActionResult Index()
{
_logger.LogInformation("this is a information from ILogger...");
return View();
}
//other code
}
[如果您还有其他问题,请告诉我。
我终于自己弄清楚了。我需要添加配置AzureFileLoggerOptions。没有这些选项,Azure输出中什么都不会显示。
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureServices(serviceCollection => serviceCollection
.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
}).Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
})
)
总之,对于.Net Core 3.1,要使您的消息显示在“日志流”中,您需要在Azure的“应用程序服务日志”部分中启用“应用程序日志记录”。在您的代码中,您需要引用:
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Logging.AzureAppServices;
而且,在我的情况下,我使用的是Blazor / SignalR,并且没有MVC控制器,因此我无法弄清楚如何访问班级中的Logging框架。我确信有更好的方法,但是通过将ILogger公开为下面的代码,可以在代码库中的任何位置引用它。
我有一个静态方法可以调用来写入日志(在我的PC上进行积极调试时可以控制台,在Azure中运行时可以使用Azure“ Log Stream”:
public static void WriteToLog(string message)
{
Program.Logger.LogError(message);
}
我的Program.cs中的代码如下:
public class Program
{
public static ILogger Logger;
public static void Main(string[] args)
{
//CreateHostBuilder(args).Build().Run();
var host = CreateHostBuilder(args).Build();
var LoggerF = LoggerFactory.Create(builder =>
{
builder.AddFilter("BlazorDiceRoller", LogLevel.Warning)
.AddConsole().AddAzureWebAppDiagnostics()
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning);
});
Logger = LoggerF.CreateLogger<Program>();
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureServices(serviceCollection => serviceCollection
.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
}).Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
})
)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}