【问题标题】:Where should a WinForm app keep its logs?WinForm 应用程序应将其日志保存在哪里?
【发布时间】:2011-04-09 01:36:31
【问题描述】:

我正在开发一个 WinForm 应用程序,它允许使用“项目”(将应用程序视为 Visual Studio,将项目视为 VS 解决方案)。

我的问题是 - 应用程序应该将其日志文件保存在哪里?

一些要求包括:

  • 应用程序可能未以管理员身份运行(因此保存在 %ProgramFiles% 安装文件夹中不是一个好的选择)
  • 最终用户应该可以访问这些日志(供审查或发送给支持团队)。 (这意味着很难找到文件夹,例如 %AppData%\Company\Application\Version\ProjectName... 也不是一个好的解决方案)
  • 即使没有打开的项目,应用程序也可能会生成日志(因此,仅当有项目时,将日志保存在项目文件夹中才有用,但不是最终解决方案)。

我正在考虑在安装应用程序时创建一个“工作文件夹” - 类似于 C:\Application\ 的内容,然后将日志保存在子文件夹中,例如 %WorkingFolder%\Logs\ProjectName

感谢您的意见。

【问题讨论】:

    标签: windows winforms logging desktop-application


    【解决方案1】:

    如果它们特定于当前运行的用户,则用户目录中的某个位置实际上是存储它们的正确位置。

    一些程序在用户目录的顶层创建文件夹,在文档和桌面旁边,其他程序在文档中创建。

    如果用户没有对根目录的写入权限,在 C:\ 中创建它可能会导致问题。您几乎可以保证用户对主目录具有写入权限。

    另一种选择是寻找一个环境变量,如果它的设置使用该值作为位置,如果不是默认为用户的主目录。

    【讨论】:

    • 我自己也遇到过这个问题。我使用 XP,所以我最初并没有意识到 vista 如何处理权限的问题。您应该将用户目录用于程序在运行期间必须读取/写入的任何内容。
    • 或者,如果日志不是特定于用户的,它们可以放在“所有用户”应用程序数据目录中。
    【解决方案2】:

    如果日志仅供用户使用,则应将它们存储在 %AppData%\Company\Application Name

    如果日志是共享的(任何用户都可以看到任何日志),您应该将它们存储在:
    %ProgramData%\Company\Application Name(适用于 Vista+)

    %AllUsersProfile%\Application Data\Company\Application Name(适用于 XP-)

    对于用户访问,您可以将开始菜单的快捷方式添加到适当的位置,或者在程序中提供链接。

    Vista+ 中的另一个选项是Public 文件夹 (%Public%),它在整个资源管理器中都有链接以便于访问。

    Where should I write program data instead of Program Files 是来自 Microsoft 的 Chris Jackson 的一篇不错的博客文章。虽然它不是“官方立场”,但它包含一些很好的信息。

    【讨论】:

      【解决方案3】:

      您可以随时要求用户进行配置。设置默认路径,可能是应用程序目录。在安装期间或设置应用程序时,您可能会提示用户输入他们想要用于日志的路径。这很公平,对。如果它们足够先进,可以使用日志,它们也足以配置路径。

      【讨论】:

      • 不幸的是,用户通常没有那么先进,这就是我作为开发人员想要保留日志的原因。然后,与用户的描述相比,我可以说出真正发生的事情。
      • 很公平。我建议您将其保存在应用程序目录内的 Logs 文件夹中,并在您的应用程序程序目录或应用程序本身内创建日志文件夹的快捷方式。我认为这应该是整洁的。这将减轻总是选择静态路径的限制。您将来可能会更改路径,用户不会受到影响。
      【解决方案4】:

      您打算如何处理这些日志。它们是用于财务/安全审计的技术吗?

      EventLog 是存储技术日志的好地方,因为您可以远程访问它(在域内)并且它会被自动清理。

      %AppData% 也是存储技术日志的好地方,特别是在您无法连接到事件日志的情况下。您可以找到日志文件,并且可以将最终用户定向到它们,但它们不是“面对”最终用户。您可以添加一个“将日志发送给制造商”按钮来接收它们。

      对于需要最终用户访问的日志,我的文档(或子文件夹)看起来不错。

      【讨论】:

      • 我会对在 EventLog 中存储日志发表评论,有时人们没有意识到他们写得太频繁以至于填满了它。如果不出所料,这会导致其他问题。我喜欢将它用于真正的特殊情况,并留下我想要记录并希望记录到日志文件的情况。
      【解决方案5】:

      您可以将按钮/菜单项添加到带有日志的轻松打开文件夹中。 日志的最佳位置是 %AppData%\AppName 或 %temp%\AppName。 切勿使用 %MyDocs% 或 %Program Files%。

      【讨论】:

        【解决方案6】:

        我建议将该问题添加到安装程序中,以便安装软件的用户可以决定将日志放在哪里最好。尽管C:\[AppName\ 听起来像是满足您要求的合理默认值。

        编辑:只是想了一下,如果选择了错误的位置(在程序文件或系统驱动器的根目录等)并且如果他们选择创建一个新目录,则可能值得警告用户,自动给出安装过程中目录正确的权限。

        【讨论】:

          【解决方案7】:

          我认为 %APPDATA%\YourCompanyName\YourAppName 是首选位置。为了克服你对这个位置很难找到的反对意见,你可以在你的应用程序中轻松快速地实现一个简单的支持屏幕,让最终用户能够轻松访问和通过电子邮件发送这些日志,这样用户就可以无需记住或手动导航到长路径名即可访问日志。

          我不太喜欢用户能够通过安装程序设置此位置的想法,因为可能存在命名和权限问题。

          【讨论】:

            【解决方案8】:

            如果应用只需要维护用户当前登录时间跨度的日志,那么您可以将其保存在 c:/temp 中。

            我的大多数winapps,我把它留在那里,所以一旦用户注销它就会自动被删除..

            当然,这主要取决于您的要求。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-07-13
              • 1970-01-01
              • 1970-01-01
              • 2021-10-14
              • 2013-06-19
              • 2010-09-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多