AzureでWebアプリとしてホストするASP.NET5 WebAPIがあります。 AzureDiagnosticsを使用してコードからメッセージをログに記録したい。 Azure docs を含む複数の記事があり、一度有効にするとSystem.Diagnostics.Trace.WriteLine
と同じくらい簡単になるはずだと示唆しています。ログは、LogsFiles/Application
の下およびAzureのログストリームに表示されます。
Webアプリのアプリケーションロギングを有効にしました:
ただし、次の呼び出しではログは生成されません。
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"));
}
私が間違っていることについて何か考えはありますか?
Azureアプリの簡単なトリックを見つけました。 https://github.com/aspnet/Logging/tree/dev/src/Microsoft.Extensions.Logging.AzureAppServices を参照してください。パッケージを追加してください " Microsoft.Extensions.Logging.AzureAppServices ":" 1.0.0-preview1-final "および関連する依存関係を更新し、次のようにstartup.csにAzure診断を追加します。
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とファイルの両方のログオンが正常に機能します。追加の構成は必要ありません。 :)
web.config
を見ると、おそらくstdoutLogEnabled="false"
があります。これをtrueに設定すると、標準出力に書き込まれるものはすべてファイルに書き込まれます。そして、stdoutLogFile
はそれがどこに行くかを決定し、デフォルトではd:\home\logfiles
の下にあります。
次に、ログが実際にstdoutに送られることを確認する必要があります。 Console.WriteLine
を実行すると間違いなく機能します。 startup.cs
のILoggerFactory
を介して設定し、ログをstdoutに送ることもおそらく可能だと思います。
次のクラスを作成することで、ASP.NET 5 Webアプリでストリーミングログ出力が機能するようになりました( David Ebboの例 に基づく):
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());
これは、ファイルシステムベースのロギングのみをサポートします(ライブログストリームには十分です)。