代码之家  ›  专栏  ›  技术社区  ›  Keith Sirmons

在Windows中写入错误日志的最佳位置在哪里?

  •  11
  • Keith Sirmons  · 技术社区  · 16 年前

    比如说,您将在哪里写入错误日志文件 ErrorLog.txt ,在Windows中?请记住,该路径需要向基本用户开放,以获得文件写入权限。

    我知道事件日志可能是写入错误的位置,但它是否适用于“用户”级权限?


    至于事件日志,我以前在一个ASP.NET应用程序中遇到过问题,我想登录到Windows事件日志,但安全问题让我心痛。(我不记得曾经有过这些问题,但记得曾经有过。)

    10 回复  |  直到 14 年前
        1
  •  14
  •   John Saunders    14 年前

    在Vista上,不能将这样的文件放在c:\program files下。你会遇到很多问题。

    在.NET中,您可以通过以下内容找到此文件夹:

    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
    

    事件日志的使用也相当简单:

    http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx

        2
  •  5
  •   to StackOverflow    16 年前

    文本文件对于服务器应用程序非常有用(您确实说过Windows 2003)。每个服务器应用程序都应该有一个单独的日志文件,其位置实际上是与管理员商定的惯例。例如,对于ASP.NET应用程序,我经常看到它们被放置在与应用程序不同的磁盘上,文件夹结构类似于虚拟目录结构。

    对于客户端应用程序,文本文件的一个缺点是,用户可能会启动应用程序的多个副本(除非您已采取特定步骤防止此情况发生)。因此,如果多个实例试图写入同一个日志文件,就会出现争用问题。出于这个原因,我总是希望客户端应用程序使用Windows事件日志。需要注意的是,您需要是管理员才能创建事件日志-这可以通过安装程序包来完成。

    ApplicationData,而不是其他人建议的SpecialFolder.ApplicationData。LocalApplicationData位于本地磁盘上:当用户具有漫游配置文件时,您不希望网络问题阻止您登录。对于WinForms应用程序,请使用application.LocalUserAppDataPath。

        3
  •  3
  •   Peter Mortensen icecrime    14 年前

    就个人而言,我建议使用Windows事件日志,这很好。如果不能,则将文件写入ApplicationData目录或ProgramData(Windows XP上所有用户的应用程序数据)目录。

        4
  •  2
  •   gimel    16 年前

    C:\Documents and Settings\All Users\Application Data\MyApp
    

    C:\Documents and Settings\%Username%\Application Data\MyApp
    

    (又名 %UserProfile%\Application Data\MyApp 用户级 许可要求。它还分离由不同用户创建的日志。

    使用

    AppDir=
      System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
    

    AppDir=
      System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    

    然后:

    MyAppDir = IO.Path.Combine(AppDir,'MyApp')
    

    远景 个人资料)。

        6
  •  1
  •   Peter Mortensen icecrime    14 年前

    我同意Lou的观点,但我更喜欢像Joe说的那样在配置文件中设置。你可以用

    配置文件中的(“Test”可以是您想要的,也可以完全删除),这将导致日志文件写入“/Documents and Settings/logiuser/Application” Windows XP上的“数据/测试”和Windows Vista上的“/用户/登录用户/应用数据/漫游/测试”。

    这与Windows应用程序一样有效。为了使用登录web应用程序,我发现Phil Haack在这方面的博客是一个很好的资源: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

        7
  •  0
  •   workmad3    16 年前

        8
  •  0
  •   David Robbins    16 年前

    与此相反,这取决于你需要做什么。有时您需要操纵结果,因此log.txt是一种方法。它简单、易变、易于搜索。

    以乔尔为例。Fogbugz将通过http向其服务器发送错误消息的日志/转储。您也可以这样做,不必担心用户对其驱动器的访问权限。

        9
  •  0
  •   ExplodingBoy    14 年前

    我个人不喜欢在我现在所在的位置使用Windows事件日志,因为我们无法访问生产服务器,这意味着我们需要在每次查看错误时请求访问。不幸的是,这不是一个快速的过程,因此您的故障排除完全是由等待其他人来完成的。我也不喜欢它们在其他应用程序中迷失。当然你可以排序,但这只是一个向下滚动的小问题。你所使用的最终将是个人偏好与工作环境的限制的结合。(日志文件、事件日志或数据库)

        10
  •  -4
  •   Peter Mortensen icecrime    14 年前

    将它放在应用程序的目录中。用户需要访问文件夹才能运行和执行应用程序,并且您可以在应用程序启动时检查写访问权限。

    使用事件日志进行故障排除是件麻烦事,但是您仍然应该在那里发布重大错误。

    编辑-如果使用.NET,则应查看MS应用程序块以进行日志记录。他们真的让生活变得轻松。

    天哪,因果报应杀手。下一次,当海报贴出一篇不完整的帖子时,我甚至不会提供任何建议。