14

异常日志应该去哪里的问题已经在这里讨论过一次或两次(或更多),其中一个建议是应用程序永远不应该写入安装文件夹。
但是,如果我将日志放在 %appdata% 的某个位置,这意味着每个用户都有自己的一组日志。我更喜欢将所有日志放在一个位置。
在最后一个 MSDN mag 问题中,安装文件夹中有一个单独的日志子文件夹(例如 %programfiles\myapp\logs)被称为规则中的有效例外。当然,此文件夹的 ACL 必须相应设置。
在安装文件夹中有一个日志文件夹是常见的做法还是绝对不行?你把你的异常日志放在哪里?

编辑:
事实上,我们使用的是 log4net,所以日志的位置和类型是完全可配置的。但是,我希望有一个合理的默认值。我更喜欢在事件日志上有一个文件。对于大多数用户来说,文件比事件日志更容易处理。
但是,让我们假设我想要文件。安装文件夹中有日志文件夹可以吗?

4

7 回答 7

9

对于 Windows,使用事件日志。创建自己的日志非常容易,或者您可以将消息添加到标准日志之一。

这样做的好处是,地球上几乎所有的技术人员(和程序员)都希望在事情不顺利时会在事件日志中显示一些内容。

于 2009-01-21T15:42:07.563 回答
8

要在没有特殊 ACL 的情况下登录到公共文件,请使用类似

string saveFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\MyCompany";

其中引用了文件夹

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

在 XP 上,以及类似的东西

C:\ProgramData\MyCompany

在 Vista 下。您需要在某个时候验证该文件夹是否存在 - 可能在应用程序启动时。

于 2009-01-21T16:37:55.250 回答
7

使用较新的 OS vista 和 win 2008 写入程序文件目录可能需要 ACL 或虚拟化到用户的文件夹。我建议在 %AllUsersProfile% 下设置一个目录,这样您就可以为所有用户的日志文件提供一个公共位置,并且您的应用程序无需以管理员身份运行即可将它们写入那里。

于 2009-01-21T16:03:11.780 回答
2

如果您不能或不会使用事件日志,那么对于放置日志文件的位置确实没有任何标准化。您只需要确保该位置有据可查,并且您的代码中确实需要有逻辑,以确保日志文件可以增长到的大小存在限制。

于 2009-01-21T15:57:11.527 回答
1

这主要取决于应用程序,这就是为什么我猜有这么多可能的答案。

对于网站,我会在服务器上有一个“C:\log”,然后是单个网站的“C:\log\website”,并使用 Log4Net 或类似的。

对于 Web 服务、窗口服务、计划作业等,我会写入 Windows 事件日志。我的电脑 -> 管理 -> 系统工具 -> 事件视图 -> (我的服务)

对于部署在我控制的环境中的 Windows 应用程序(即内部公司应用程序),我会让它通过电子邮件发送“IT 团队”异常报告。

对于分发给未知用户的 Windows 应用程序。没做什么。

于 2009-01-21T15:45:16.590 回答
1

您需要注意写入日志文件夹的权限。

这是使用应用程序数据文件夹而不是安装文件夹的关键原因之一,因为在 Vista 和向前发展中,默认情况下您可能无权写入安装文件夹。

于 2009-01-21T16:01:19.367 回答
1

我认为您应该更喜欢 AppData 文件夹,但如果您想将所有日志合并到一个文件夹中,则使用所有用户目录(Environment.SpecialFolder.CommonApplicationData)并在您的应用程序文件夹中为每个用户创建子文件夹。这样,您不仅可以摆脱权限问题,还可以避免弄乱自己的空间:) 恕我直言。

于 2009-01-21T16:15:47.743 回答