WinForm应用程序应该在哪里保留其日志?

时间:2010-09-07 07:29:14

标签: windows winforms logging desktop-application

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

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

一些要求包括:

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

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

感谢您的投入。

8 个答案:

答案 0 :(得分:3)

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

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

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

另一个选项是查找环境变量,如果它的集合使用该值作为位置,则默认为用户的主目录。

答案 1 :(得分: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是来自微软的Chris Jackson的一篇很好的博客文章。虽然它不是一个“官方立场”,但它拥有一些很好的信息。

答案 2 :(得分:0)

您始终可以要求用户进行配置。设置默认路径,可能是应用程序目录。在安装过程中或在设置应用程序时,您可以提示用户输入要用于日志的路径。这是公平的,对。如果它们足够先进以使用日志,那么它们也足以配置路径。

答案 3 :(得分:0)

我建议将该问题添加到安装程序,以便安装软件的用户可以决定最佳放置日志的位置。虽然C:\[AppName\听起来像是您的要求的合理默认值。

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

答案 4 :(得分:0)

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

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

%AppData%也是技术日志的好地方,特别是如果您无法连接到事件日志。您可以找到日志文件,并且可以将最终用户定向到它们,但它们不是最终用户的“面子”。您可以包含“向制造商发送日志”按钮以接收它们。

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

答案 5 :(得分:0)

您只需将按钮/菜单项添加到包含日志的简易打开文件夹即可。 日志的最佳位置是%AppData%\ AppName或%temp%\ AppName。 切勿使用%MyDocs%或%Program Files%。

答案 6 :(得分:0)

我认为%APPDATA%\ YourCompanyName \ YourAppName是首选位置。为了克服您对此位置难以找到的陈述,您可以非常轻松快速地在应用中实现简单的支持屏幕,以便最终用户能够轻松访问和通过电子邮件发送这些日志,这样用户就可以不必记住或手动导航到长路径名称以获取日志。

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

答案 7 :(得分:0)

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

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

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