チームの他のメンバーがログをウェブアプリケーションへの書き込みアクセス権を与えずに利用できるようにしたいと考えています。
Azure Web Appは、アプリケーションログを格納する2つの方法を提供します。ファイルシステムとブロブストレージ。 Blobストレージをオンにして、アプリケーションログをAzure Blobストレージに保存することができます。その後、Blobストレージに対して読み取り専用アクセスを許可する共有アクセスシグネチャ(SAS)を作成できます。
アプリケーションログブロブストレージを有効にしたくない場合は、ファイルシステムからログを読み取り、チームメンバーに共有することができます。ログファイルは "D:\ home \ LogFiles"に格納されます。 .NET Frameworkによって提供されるFileクラスとDirectoryクラスを使用して、それらを読み取ることができます。 ASP.NET MVCのサンプルコードを作成しました。下記のコードは参照用です。
表示するフォルダとファイルの情報を渡すために使用されるモデル。フォルダ情報を表示し、サーバ側からファイルをダウンロードするために使用されている
public class LogFolder
{
public LogFolder() { }
public LogFolder(string virtualPath)
{
FolderVirtualPath = virtualPath;
}
public string FolderName
{
get
{
int lastIndex = FolderVirtualPath.LastIndexOf(@"\");
if (lastIndex < 0 && FolderVirtualPath.Length > 0) { return FolderVirtualPath; }
else { return FolderVirtualPath.Substring(lastIndex + 1); }
}
}
public string FolderVirtualPath { get; set; }
public string FolderPath {
get
{
return Path.Combine(@"D:\home\LogFiles\", FolderVirtualPath);
}
}
public List<LogFolder> SubFolders { get; set; }
public List<LogFile> SubFiles { get; set; }
public void GetSubFilesAndFolders()
{
SubFolders = new List<LogFolder>();
IEnumerable<string> folders = Directory.EnumerateDirectories(FolderPath);
foreach (var folder in folders)
{
SubFolders.Add(new LogFolder(folder.Replace(@"D:\home\LogFiles", "")));
}
SubFiles = new List<LogFile>();
IEnumerable<string> files = Directory.EnumerateFiles(FolderPath);
foreach (var file in files)
{
SubFiles.Add(new LogFile(file.Replace(@"D:\home\LogFiles", "")));
}
}
}
public class LogFile
{
public LogFile() { }
public LogFile(string virtualPath)
{
FileVirtualPath = virtualPath;
}
//Used to display the file name
public string FileName { get { return Path.GetFileName(FilePath); } }
public string FileVirtualPath { get; set; }
//used to download the file
public string FilePath
{
get { return Path.Combine(@"D:\home\LogFiles\", FileVirtualPath); }
}
}
コントローラ。
public ActionResult Folder(string folderVirtualPath)
{
LogFolder folder = new LogFolder(folderVirtualPath);
folder.GetSubFilesAndFolders();
return View(folder);
}
public ActionResult DownloadFile(string fileVirtualPath)
{
LogFile file = new LogFile(fileVirtualPath);
if (System.IO.File.Exists(file.FilePath))
{
return File(System.IO.File.ReadAllBytes(file.FilePath), "application/octet-stream", file.FilePath);
}
else
{
return HttpNotFound("File Not Found");
}
}
フォルダ情報を表示するために使用されるビュー。
@model TestAccessFIles.Controllers.LogFolder
@{
ViewBag.Title = "Folder";
}
<h2>Folder : @Model.FolderVirtualPath </h2>
<h3>Sub Folders</h3>
<ul>
@foreach (var folder in Model.SubFolders)
{
<li><a href="@Url.Action("Folder",new { folderVirtualPath = folder.FolderVirtualPath })">@folder.FolderName</a></li>
}
</ul>
<h3>Sub Files</h3>
<ul>
@foreach (var file in Model.SubFiles)
{
<li><a href="@Url.Action("DownloadFile",new { fileVirtualPath = file.FileVirtualPath })">@file.FileName</a></li>
}
</ul>