12

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

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

编辑:我的目标是 Windows 2003,但我提出问题的方式是有一个“一般指南”​​来说明在哪里写入错误日志。
至于事件日志,我以前在一个 ASP.NET 应用程序中遇到过问题,我想在其中记录到 Windows 事件日志,但我遇到了让我心痛的安全问题。(我不记得我遇到的问题,但记得有这些问题。)

4

10 回答 10

14

您是否考虑过记录事件查看器?如果你想写自己的日志,我建议用户本地应用设置目录。在下面创建一个产品目录。它在不同版本的 Windows 上有所不同。

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

在 .NET 中,您可以使用以下命令找到此文件夹:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

并且事件日志使用起来也相当简单:

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

于 2008-10-10T14:36:04.423 回答
5

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

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

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

无论哪种情况,我都会使用配置文件来决定在哪里记录,以便您可以轻松更改它。例如,如果您使用 Log4Net 或类似的框架,您可以轻松配置是否记录到文本文件、事件日志、两者或其他地方(例如数据库),而无需更改您的应用程序。

于 2008-10-11T11:49:16.977 回答
3

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

于 2008-10-10T14:36:31.507 回答
3

标准位置是:

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

或者

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

(aka %UserProfile%\Application Data\MyApp) 这将符合您的用户级别权限要求。它还分隔不同用户创建的日志。

使用.NET运行时,这些可以构建为:

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

或者

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

其次是:

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

(希望也能映射Vista配置文件)。

于 2008-10-10T14:43:42.460 回答
2

Windows 事件日志绝对是记录错误的方法。您不限于“应用程序”日志,因为可以创建新的日志目标(例如“我的应用程序”)。这可能需要作为设置的一部分来完成,因为我不确定它是否需要管理权限。在http://support.microsoft.com/kb/307024有一个 C# 中的 Microsoft 示例。

Windows 2008 还具有事件日志转发功能,这对于服务器应用程序来说非常方便。

于 2008-10-10T14:44:10.460 回答
1

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

文件值="${APPDATA}/Test/log-file.txt"

(“测试”可以是您想要的任何内容,也可以完全删除),这会导致日志文件写入 Windows XP 上的“/Documents and Settings/LoginUser/Application Data/Test”和“/Users/ Windows Vista 上的登录用户/应用程序数据/漫游/测试。

我只是添加了这个,因为我花了太多时间来弄清楚如何在 Windows Vista 上进行这项工作......

这适用于 Windows 应用程序。要在 Web 应用程序中使用日志记录,我发现 Phil Haack 的博客条目是一个很好的资源: http ://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

于 2008-10-19T00:10:28.703 回答
0

%TEMP% 始终是我找到的日志的好位置。

于 2008-10-10T14:34:58.733 回答
0

在这里违背粮食 - 这取决于你需要做什么。有时您需要操纵结果,所以 log.txt 是要走的路。它简单、可变且易于搜索。

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

于 2008-10-11T11:24:43.313 回答
0

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

于 2010-12-22T15:48:34.797 回答
-4

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

事件日志很难用于故障排除,但您仍然应该在那里发布重大错误。

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

Jeez 业力杀手。下次当发帖人发布不完整的帖子时,我什至不会提供建议。

于 2008-10-10T14:35:47.030 回答