tutorial net create asp app c# azure logging asp.net-core azure-diagnostics

c# - tutorial - create an asp net web app in azure



Inicio de sesiĆ³n desde la aplicaciĆ³n ASP.NET 5 alojada como Azure Web App (3)

Encontré un truco simple para la aplicación azul, consulte https://github.com/aspnet/Logging/tree/dev/src/Microsoft.Extensions.Logging.AzureAppServices , agregue el paquete "Microsoft.Extensions.Logging.AzureAppServices". ":" 1.0.0-preview1-final "y actualizar las dependencias relacionadas, agregue los diagnósticos de azure en startup.cs como este:

loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); loggerFactory.AddAzureWebAppDiagnostics(); // for default setting.

o para la configuración personalizada:

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

Y habilite el registro de diagnósticos en azul, tanto el inicio de sesión en blob como el archivo funcionan bien. No necesita configuración adicional. :)

Tengo una API web ASP.NET 5 que alojo en Azure como una aplicación web. Deseo registrar mensajes de mi código usando Azure Diagnostics. Hay varios artículos, incluidos los documentos de Azure, que sugieren que debería ser tan fácil como System.Diagnostics.Trace.WriteLine una vez habilitado. Los registros deben aparecer en LogsFiles/Application y en la secuencia de registro en Azure.

He habilitado el registro de aplicaciones para la aplicación web:

Pero las siguientes llamadas no producen registros:

System.Diagnostics.Trace.TraceError("TEST"); System.Diagnostics.Trace.TraceInformation("TEST"); System.Diagnostics.Trace.TraceWarning("TEST"); System.Diagnostics.Trace.WriteLine("TEST");

Traté de definir manualmente el símbolo TRACE , pero sin suerte:

También traté de usar el nuevo Microsoft.Extensions.Logging framework y usar la API ILogger.Log , pero sin ningún resultado:

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")); }

¿Alguna idea sobre qué estoy haciendo mal?


Obtuve la salida de Streaming Log trabajando para una aplicación web ASP.NET 5 escribiendo la siguiente clase (basada en github.com/davidebbo-test/ConsoleInterceptor ):

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); } }

y luego poner esto en mi Startup.Configure :

Trace.Listeners.Add(new AzureApplicationLogTraceListener());

Esto solo admite el registro basado en el sistema de archivos (que es suficiente para las transmisiones de registro en vivo).


Si miras tu web.config , probablemente tenga stdoutLogEnabled="false" . Si establece eso en verdadero, todo lo que se escriba en la salida estándar se escribirá en un archivo. Y stdoutLogFile determina a dónde va, que por defecto está bajo d:/home/logfiles .

Ahora necesita asegurarse de que su registro realmente esté en stdout. Hacer Console.WriteLine definitivamente funcionaría. Creo que probablemente también sea posible configurar cosas a través de ILoggerFactory en su startup.cs para hacer que los registros vayan a stdout.