IIS 로그를 파일 시스템에 기록하도록 Azure 웹 사이트를 구성했습니다. 내 웹 사이트 내에서 관리자가 사이트의 트래픽에 대한 보고서를 볼 수있는 대시 보드 페이지를 만들고 싶습니다.이 보고서는 이러한 로그를 분석하여 생성되었습니다.동일한 웹 사이트에서 Azure IIS 로그에 액세스
DirectoryInfo.GetFiles()
코드로 로그 디렉터리에 액세스하려고 시도했으며 FtpLib를 사용하여 FTP를 통해 연결하려고 시도했습니다.
Azure 외부에서 나는 FTP에 연결하여 로그를 다운로드 할 수 있지만 Azure 웹 사이트에서 실행되는 코드에서 볼 수는 없습니다. Azure가 웹 사이트 코드에서 보내는 FTP 트래픽을 허용하지 않는다고 가정합니다.
사이트 : /site/wwwroot
로그 :
합니다 (FTP를 검사하여) 하늘빛의 폴더 구조는 같은 보이는 가상 디렉터리를 만들 수있는 푸른 포털 내에서 /LogFiles/http/RawLogs
을, 그러나 그들은이다/사이트 내에서만 허용됩니다.
사이트가 Azure 웹 사이트, MVC 4, 통합 파이프 라인, 64 비트, .NET 4.5로 실행 중이며 FTP의 경우 FtpLib v1.0.1.2를 사용 중입니다. FtpLib가 Login()
에서 다음 메시지와 함께 실패합니다. 알 수없는 오류 (0x2ee2)
Azure 내에서 로깅을 변경하여 Blob 저장소에 기록 할 수 있다는 것을 알고 있습니다. 그러나 추가 월 비용이 발생합니다. 이 파일에 액세스 할 수있는 다른 옵션이 있습니까?
감사합니다.
편집 :
using (var ftp = new FtpConnection("XXXXXXXX.windows.net", "XXXXXXXX", "XXXXXXXX"))
{
ftp.Open();
ftp.Login(); //Fails here
ftp.SetLocalDirectory(Server.MapPath("~/")); //Temp
ftp.SetCurrentDirectory("/LogFiles/http/RawLogs");
foreach (var f in ftp.GetFiles("*.log"))
{
ftp.GetFile(f.Name, f.Name, false);
ftp.RemoveFile(f.Name);
}
}
을 그리고 여기에 파일 시스템 버전 :
//var logRoot = Server.MapPath("~/../../LogFiles/http/RawLogs"); //Throws error about traversal outside of site root
//var logRoot = "/LogFiles/http/RawLogs"; //Throws error: Could not find a part of the path 'D:\LogFiles\http\RawLogs'.
var logRoot = "LogFiles/http/RawLogs"; //Throws error: Could not find a part of the path 'D:\Windows\system32\LogFiles\http\RawLogs'.
foreach (var f in new DirectoryInfo(logRoot).GetFiles("*.log"))
{
f.CopyTo(root + f.Name, true);
f.Delete();
}
LogFiles 폴더의 특정 파일에서 File.ReadAllLines (...)을 사용하여 읽을 수있었습니다. 코드를 확인하십시오. 사실 Directory.GetFiles()를 수행하고 파일을 가져올 수있었습니다. 코드를 확인하십시오. 또는 추가 평가를 위해 코드를 게시하십시오. – ramiramilu
경로가 맞습니까? LogFiles는 보통 루트 폴더와 함께 C :에 저장됩니다. 그러나 나는 D : 당신의 길에 뛰어 드는 것을 봅니다. LogFiles와 Site를 포함하고있는 루트 폴더 뒤에 쓰기 권한이 없다는 것은 꽤 확신합니다. 경로는 C : \ DWASFiles \ Sites \ customname \ VirtualDirectory0 \ Site 및 C : \ DWASFiles \ Sites \ customname \ VirtualDirectory0 \ LogFiles와 같아야합니다. – ramiramilu
예, Azure가 예외로 표시 한 경로입니다. 이 사이트는 가상 머신이 아닌 웹 사이트로 호스팅됩니다. 나는 "D :"를 지정하지 않고, Azure가 그것을 선택합니다. 질문에서 언급했듯이 FTP를 통해 보는 것은 사이트 코드가/site /에 있고 로그가/LogFiles /에 있다는 것을 의미합니다. 물론 이것은 FTP가 직접 파일 시스템에 액세스하는 것이 아니기 때문에 파일의 실제 모습을 추상화 한 것일 수 있습니다. –