すべてのWebサーバーの要求をファイルではなくSQLに記録します。WebserverのログAzure - > SQL Server
Azureポータルでは、ファイルシステムまたはストレージに保存するオプションしかないようです。
代わりにSQLデータベースに保存する方法はありますか?
すべてのWebサーバーの要求をファイルではなくSQLに記録します。WebserverのログAzure - > SQL Server
Azureポータルでは、ファイルシステムまたはストレージに保存するオプションしかないようです。
代わりにSQLデータベースに保存する方法はありますか?
代わりにSQLデータベースに保存する方法はありますか?
現在、Azure Web Appはこの機能を提供していません。次のサイトに機能リクエストを投稿することができます。
How can we improve Azure Web Apps?
WebサーバーのログW3Cログ形式を使用します。このログをStorageに保存するオプションを選択した場合。 Azure Blob Serviceのログファイル名の形式は、次のようになります。
Azure Web Appはロググループを時間単位で保存します。 WebJobを作成し、TimeTriggerを使用してログアウトを読み込み、ログファイルを解析し、毎時SQL Serverにデータを保存することができます。下記のコードは参照用です。
// Runs immediately on startup, then every two hour
public static void SaveLogsToSQLJob(
[TimerTrigger("0 0 * * * *", RunOnStartup = true)] TimerInfo timerInfo)
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection_string");
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve a reference to a container.
CloudBlobContainer container = blobClient.GetContainerReference("ServerLogContainerName");
var blobs = container.GetDirectoryReference("YourWebAppName").GetDirectoryReference(DateTime.Now.Year.ToString())
.GetDirectoryReference(DateTime.Now.Month.ToString())
.GetDirectoryReference((DateTime.Now.Hour == 0 ? DateTime.Now.Day - 1 : DateTime.Now.Day).ToString())
.GetDirectoryReference((DateTime.Now.Hour == 0 ? 23 : DateTime.Now.Hour - 1).ToString()).ListBlobs();
foreach (CloudBlockBlob blob in blobs)
{
using (Stream stream = blob.OpenRead())
{
using (StreamReader sr = new StreamReader(stream))
{
string line = null;
while ((line = sr.ReadLine()) != null)
{
if (!line.StartsWith("#"))
{
string[] fields = line.Split(' ');
//Save these fields to database
}
}
}
}
}
}
ログファイルに従って、SQLテーブルに次の16個の列を作成する必要があります。
date time s-sitename cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status