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

Permissions 在Windows中写入错误日志的最佳位置在哪里?,permissions,error-logging,Permissions,Error Logging,在Windows中,您将在何处编写错误日志文件,例如ErrorLog.txt?请记住,该路径需要向基本用户开放,以获得文件写入权限 我知道事件日志可能是写入错误的位置,但它是否适用于“用户”级权限 编辑:我的目标是Windows 2003,但我提出这个问题的方式是,对在何处编写错误日志有一个“一般指导原则”。 至于事件日志,我以前在一个ASP.NET应用程序中遇到过问题,我想登录到Windows事件日志,但安全问题让我心痛。(我不记得我遇到过什么问题,但记得有过这些问题。)%TEMP%始终是我找

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

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

编辑:我的目标是Windows 2003,但我提出这个问题的方式是,对在何处编写错误日志有一个“一般指导原则”。

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

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

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

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

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


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

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

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

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
事件日志的使用也相当简单:


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

标准位置为:

(又名
%UserProfile%\Application Data\MyApp
)符合您的用户级权限要求。它还分离由不同用户创建的日志

使用.NET运行时,可以将其构建为:

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

其次是:

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

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

Windows事件日志绝对是记录错误的好方法。您不限于“应用程序”日志,因为可以创建新的日志目标(例如“我的应用程序”)。这可能需要作为安装的一部分来完成,因为我不确定它是否需要管理权限。在C#at中有一个微软的例子


Windows 2008还提供了一个可以非常方便地使用服务器应用程序的工具。

这与这里的规则背道而驰-这取决于您需要做什么。有时您需要操纵结果,因此log.txt是一种方法。它简单、易变、易于搜索


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

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

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

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


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

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

file value=“${APPDATA}/Test/log file.txt”

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

我只是添加了这个,因为我花了太多的时间思考如何在WindowsVista上实现这个功能

这与Windows应用程序一样有效。要使用登录web应用程序,我发现Phil Haack在这方面的博客是一个很好的资源:

我个人不喜欢在我现在所在的位置使用Windows事件日志,因为我们无法访问生产服务器,因此这意味着我们需要在每次查看错误时请求访问。不幸的是,这不是一个快速的过程,因此您的故障排除完全是由等待某人来完成的另外。我也不喜欢它们在其他应用程序中迷失。当然你可以排序,但向下滚动只是一个小问题。你使用的最终将是个人偏好的组合
AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
MyAppDir = IO.Path.Combine(AppDir,'MyApp')