Где лучшие места для записи журнала ошибок в Windows? - PullRequest
11 голосов
/ 10 октября 2008

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

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

РЕДАКТИРОВАТЬ: я нацеливаюсь на Windows 2003, но я поставил вопрос таким образом, чтобы иметь «Общее руководство» для того, где писать журналы ошибок. Что касается EventLog, у меня раньше были проблемы в приложении ASP.NET, где я хотел войти в журнал событий Windows, но у меня были проблемы с безопасностью, вызывающие у меня душевную боль. (Я не помню проблем, которые у меня были, но помню, что они у меня были.)

Ответы [ 10 ]

14 голосов
/ 10 октября 2008

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

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

В .NET вы можете найти эту папку с помощью:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

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

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

5 голосов
/ 11 октября 2008

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

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

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

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

3 голосов
/ 10 октября 2008

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

2 голосов
/ 10 октября 2008

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

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

2 голосов
/ 10 октября 2008

Стандартные местоположения:

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

или

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

(он же %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 ).

1 голос
/ 19 октября 2008

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

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

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

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

Работает как есть с приложениями Windows. Чтобы использовать регистрацию в веб-приложениях, я нашел в блоге Фила Хаака запись об этом: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

0 голосов
/ 22 декабря 2010

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

0 голосов
/ 11 октября 2008

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

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

0 голосов
/ 10 октября 2008

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

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

РЕДАКТИРОВАТЬ - Вы должны заглянуть в блоки приложений MS для регистрации, если вы используете .NET. Они действительно облегчают жизнь.

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

0 голосов
/ 10 октября 2008

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

...