首页 文章

从同一网站访问Azure IIS日志

提问于
浏览
0

我有一个Azure网站配置为将IIS日志写入文件系统 . 我希望在我的网站中有一个仪表板页面,管理员可以在其中查看有关站点流量的报告,该报告是通过解析这些日志生成的 .

我试图通过 DirectoryInfo.GetFiles() 访问代码中的日志目录,并尝试使用FtpLib通过FTP连接 .

从Azure外部,我可以连接到FTP并下载日志,但是从Azure网站中运行的代码,我不能 . 我的假设是Azure不允许来自网站代码的出站FTP流量 .

Azure的文件夹结构(通过检查FTP)看起来像:

网站: /site/wwwroot

日志: /LogFiles/http/RawLogs

在Azure门户中,您可以创建虚拟目录,但只允许在/ site中使用 .

站点作为Azure网站,MVC 4,集成管道,64位,.NET 4.5运行,对于FTP,我使用的是FtpLib v1.0.1.2 . FtpLib在 Login() 失败并显示消息:未知错误(0x2ee2)

我知道我可以更改Azure中的日志记录以记录到Blob存储,但这会导致额外的每月费用 . 是否还有其他选项可以访问这些文件?

谢谢 .

编辑:已被要求提供代码,这里是FTP版本(在本地工作,不在Azure上):

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

1 回答

  • 1

    我看到了日志文件路径的问题 . AzureWebsites使用C Drive,但在您的实现中,您将获得D Drive . 使用 Server.MapPath("~") ,然后在其上进行字符串操作以获得正确的ROOT路径 . 所以根目录将有另外两个目录 - LogFilesSite . 由于您已经获得了Root目录,请将其附加到 LogFiles 目录并从那里读取所有文件 .

相关问题