代码之家  ›  专栏  ›  技术社区  ›  Gary McGill

如何通过我的ASP.NET MVC网站提供服务器日志文件?

  •  2
  • Gary McGill  · 技术社区  · 14 年前

    我有一个asp.net mvc网站,它与处理文件上传的windows服务协同工作。为了方便网站的维护,我希望windows服务的日志文件可以通过网站访问(仅限我),这样我就可以点击 http://myserver/logs/myservice 查看日志文件的内容。我该怎么做?

    我猜,要么让服务将其日志文件写入站点顶层的“logs”文件夹中,要么让它留在原地并设置一个指向它的虚拟目录。哪一个更好-还是有其他更好的方法?

    无论文件存储在哪里,我都能看到另一个问题。我尝试了第一个选项(我的网站中的logs文件夹),但是当我尝试通过http访问该文件时,出现了一个错误:

    进程无法访问文件“foo”,因为另一个进程正在使用它。

    根据我的经验我知道我的服务会把文件锁起来 为了写作 当它运行时,但我仍然可以在记事本中打开文件来查看当前内容。(如果是这样的话,我很惊讶i i s坚持写访问)。

    我怎样才能避开那件事?我真的需要编写一个处理程序来读取文件并亲自提供给浏览器吗?或者我能用配置或者其他什么东西来解决这个问题吗?

    另外,如果有帮助的话,我正在用iis7。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Artiom Chilaru    14 年前

    很遗憾,恐怕您必须编写一个处理程序来打开文件,并将其返回给客户机。 我已经编写了一个显示服务器日志文件的iis管理器扩展,我注意到即使是简单的

    System.IO.File.OpenRead("")
    

    仍然可以在相同的问题中运行,并返回相同的错误..有点混乱。 最后我用了

    System.IO.File.Open("", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
    

    当服务器向文件写入日志时,我可以轻松地打开该文件:)

        2
  •  1
  •   BerggreenDK    14 年前

    我认为虚拟目录是一个“好”的解决方案,如果您添加了具有只读权限的目录(应用程序),也许还添加了“浏览目录”(这样您就可以看到由i is呈现的文件夹内容)。

    (但是一旦你这样做了,你应该考虑到你也可以匿名访问这个文件夹——除非你启用了身份验证,所以要注意你可能暴露的日志文件的“秘密”内容?只是一个想法。)

    另一种方法,我更喜欢自己,是创建一个mvc/asp.net页面,用普通代码在文件夹中进行查找,这样就可以100%过滤html中显示的任何数据。 您可以以文本流的形式以只读模式打开文件。

    如果访问logfolder有问题,我将使用具有只读访问权限的虚拟目录,然后编写一些程序,在屏幕上和详细级别上将日志文件呈现为html。甚至可以先添加某种“登录”。但这完全取决于您的安全级别和日志文件的内容。

    这对你有意义吗?如果不是,请解释更多,因为我已经经历了几次类似的情况下这种想法。