Ведение журнала из приложения ASP.NET 5, размещенного как Azure Web App
У меня есть веб-API ASP.NET 5, который я размещаю в Azure как веб-приложение. Я хочу регистрировать сообщения из своего кода с помощью диагностики Azure. Есть несколько статей, включая документы Azure, которые предполагают, что это должно быть так же просто, как System.Diagnostics.Trace.WriteLine
после включения. Логи должны отображаться под LogsFiles/Application
и в потоке журнала в Azure.
Я включил ведение журнала приложения для веб-приложения:
Но следующие вызовы не выдают журналы:
System.Diagnostics.Trace.TraceError("TEST");
System.Diagnostics.Trace.TraceInformation("TEST");
System.Diagnostics.Trace.TraceWarning("TEST");
System.Diagnostics.Trace.WriteLine("TEST");
Я пытался определить вручную TRACE
символ, но без везения:
Я также пытался использовать новый Microsoft.Extensions.Logging
рамки и использование ILogger.Log
API, но без каких-либо результатов снова:
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.MinimumLevel = LogLevel.Debug;
var sourceSwitch = new SourceSwitch("Sandbox.AspNet5.ApiApp-Demo");
sourceSwitch.Level = SourceLevels.All;
loggerFactory.AddTraceSource(sourceSwitch,
new ConsoleTraceListener(false));
loggerFactory.AddTraceSource(sourceSwitch,
new EventLogTraceListener("Application"));
}
Есть идеи, что я делаю не так?
3 ответа
Если вы посмотрите на свой web.config
, это, вероятно, имеет stdoutLogEnabled="false"
, Если вы установите значение true, то все, что записано в стандартный вывод, будет записано в файл. И stdoutLogFile
определяет, куда он идет, который по умолчанию находится под d:\home\logfiles
,
Теперь вам нужно убедиться, что ваша запись действительно идет в stdout. дела Console.WriteLine
определенно будет работать. Я думаю, что возможно также настроить вещи через ILoggerFactory
в вашем startup.cs
чтобы сделать логи перейти на стандартный вывод.
Я нашел простой трюк для приложения Azure, см. https://github.com/aspnet/Logging/tree/dev/src/Microsoft.Extensions.Logging.AzureAppServices, пожалуйста, добавьте пакет "Microsoft.Extensions.Logging.AzureAppServices". ": "1.0.0-preview1-final"и обновите связанные зависимости, добавьте диагностику Azure в startup.cs следующим образом:
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
loggerFactory.AddAzureWebAppDiagnostics(); // for default setting.
или для пользовательской настройки:
loggerFactory.AddAzureWebAppDiagnostics(new AzureAppServicesDiagnosticsSettings( ...)); // add custom setting.
// see here for detailed member properties: https://github.com/aspnet/Logging/blob/dev/src/Microsoft.Extensions.Logging.AzureAppServices/AzureAppServicesDiagnosticsSettings.cs
И включите журнал диагностики на Azure, и запись в BLOB-файл и файл работают хорошо. Не нужно никаких дополнительных настроек.:)
Я получил вывод Streaming Log для веб-приложения ASP.NET 5, написав следующий класс (на примере Дэвида Эббо):
public class AzureApplicationLogTraceListener : TraceListener
{
private readonly string _logPath;
private readonly object _lock = new object();
public AzureApplicationLogTraceListener()
{
string instanceId = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID");
if (instanceId != null)
{
string logFolder = Environment.ExpandEnvironmentVariables(@"%HOME%\LogFiles\application");
Directory.CreateDirectory(logFolder);
instanceId = instanceId.Substring(0, 6);
_logPath = Path.Combine(logFolder, $"logs_{instanceId}.txt");
}
}
public override void Write(string message)
{
if (_logPath != null)
{
lock (this)
{
File.AppendAllText(_logPath, message);
}
}
}
public override void WriteLine(string message)
{
Write(message + Environment.NewLine);
}
}
а затем положить это в моем Startup.Configure
:
Trace.Listeners.Add(new AzureApplicationLogTraceListener());
Это поддерживает только ведение журналов на основе файловой системы (этого достаточно для потоковых журналов в реальном времени).