Где лучшие места для записи журнала ошибок в Windows?

Где вы напишете файл журнала ошибок, скажем ErrorLog.txt, в Windows? Имейте в виду, что путь должен быть открыт для основных пользователей для разрешений на запись файлов.

Я знаю, что eventlog - это возможное место для записи ошибок, но работает ли он для разрешений на уровне пользователя?

EDIT: Я нацелен на Windows 2003, но задаю вопрос таким образом, чтобы иметь "Общее руководство", где можно записывать журналы ошибок.
Что касается EventLog, у меня были проблемы раньше в приложении ASP.NET, где я хотел войти в журнал событий Windows, но у меня были проблемы с безопасностью, вызывающие у меня сердечную боль. (Я не помню проблем, которые у меня были, но помню, как они были.)

Ответ 1

Рассматривали ли вы просмотр средства просмотра событий? Если вы хотите написать свой собственный журнал, я предлагаю каталог локальных приложений для пользователей. Создайте каталог продуктов там. Он отличается от другой версии Windows.

В Vista вы не можете поместить такие файлы в файлы c:\program. У вас будет много проблем с этим.

В .NET вы можете узнать эту папку следующим образом:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

И журнал событий довольно прост в использовании:

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

Ответ 2

Текстовые файлы отлично подходят для серверного приложения (вы сказали, что Windows 2003). У вас должен быть отдельный файл журнала для каждого серверного приложения, расположение действительно согласуется с администраторами. Например. для приложений ASP.NET я часто видел, как они помещались на отдельный диск из приложения в структуре папок, которая имитирует структуру виртуального каталога.

Для клиентских приложений одним недостатком текстовых файлов является то, что пользователь может запускать несколько копий вашего приложения (если только вы не предприняли определенные шаги для предотвращения этого). Таким образом, у вас есть проблема конкуренции, если несколько экземпляров пытаются записать в один и тот же файл журнала. По этой причине я всегда предпочитаю журнал событий Windows для клиентских приложений. Одно из предостережений заключается в том, что вам необходимо быть администратором для создания журнала событий - это можно сделать, например. по установочному пакету.

Если вы используете файл, я бы предложил использовать папку Environment.SpecialFolder. Локальная ApplicationData, а не SpecialFolder.ApplicationData, как это было предложено другими. LocalApplicationData находится на локальном диске: вы не хотите, чтобы сетевые проблемы мешали вам регистрироваться, когда пользователь имеет перемещаемый профиль. Для приложения WinForms используйте Application.LocalUserAppDataPath.

В любом случае, я бы использовал файл конфигурации, чтобы решить, где регистрироваться, чтобы вы могли легко его изменить. Например. если вы используете Log4Net или подобную структуру, вы можете легко настроить, следует ли регистрироваться в текстовом файле, журнале событий, как в другом, так и в другом месте (например, в базе данных), без изменения вашего приложения.

Ответ 3

Лично я бы предложил использовать журнал событий Windows, это здорово. Если вы не можете, напишите файл в каталоге ApplicationData или в каталоге ProgramData (Application Data for all users in Windows XP).

Ответ 4

Стандартное расположение (ы):

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).

Ответ 5

Журнал событий Windows определенно подходит для регистрации ошибок. Вы не ограничены журналом "Приложение", поскольку возможно создать новую целевую запись журнала (например, "Мое приложение" ). Возможно, это необходимо сделать как часть установки, поскольку я не уверен, что для этого требуются административные привилегии или нет. Там пример Microsoft в С# в http://support.microsoft.com/kb/307024.

В Windows 2008 также есть Пересылка журнала событий, которая может быть весьма полезна при использовании серверных приложений.

Ответ 6

Я согласен с Лу в этом, но я предпочитаю установить это в файле конфигурации, как сказал Джо. Вы можете использовать

значение файла = "$ {APPDATA}/Test/log-file.txt"

( "Тест" может быть любым, что вы хотите, или полностью удалить) в файле конфигурации, что заставляет файл журнала записываться в "/Documents and Settings/LoginUser/Application Data/Test "в Windows XP и" /Users/LoginUser/AppData/ Роуминг/Тест в Windows Vista.

Я просто добавляю это, поскольку я просто потратил слишком много времени на то, как сделать эту работу в Windows Vista...

Это работает как с приложениями Windows. Чтобы использовать запись в веб-приложениях, я нашел запись блога Phil Haack на этом, чтобы стать отличным ресурсом: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

Ответ 7

% TEMP% всегда является хорошим местом для логов, которые я нахожу.

Ответ 8

Против зерна здесь - это зависит от того, что вам нужно делать. Иногда вам нужно манипулировать результатами, поэтому log.txt - это путь. Он прост, изменен и прост в поиске.

Возьмем пример от Джоэла. Fogbugz отправит журнал/дамп сообщений об ошибках через http на свой сервер. Вы можете сделать то же самое и не беспокоиться о правах доступа пользователей на своем диске.

Ответ 9

Мне лично не нравится использовать журнал событий Windows, где я сейчас, потому что у нас нет доступа к рабочим серверам, поэтому это означает, что нам нужно будет запрашивать доступ каждый раз, когда мы хотим посмотреть на ошибки. К сожалению, это не быстрый процесс, поэтому устранение неполадок полностью вызвано ожиданием кого-то другого. Мне также не нравится, что они теряются в других приложениях. Конечно, вы можете сортировать, но это просто немного прокручивается. То, что вы используете, в конечном итоге будет сочетанием личных предпочтений вместе с ограничениями среды, в которой вы работаете. (Файл журнала, журнал событий или база данных)

Ответ 10

Поместите его в каталог приложения. Пользователям потребуется доступ к папке для запуска и выполнения приложения, и вы можете проверить доступ к записи при запуске приложения.

Журнал событий является болью для устранения неполадок, но вы все равно должны размещать там значительные ошибки.

EDIT. Вы должны заглянуть в MS Application Blocks для ведения журнала, если вы используете .NET. Они действительно облегчают жизнь.

Джиз Карма-убийцы. В следующий раз я даже не предложу предложения, когда на плакат помещается незавершенное сообщение.