Лучшее расположение для файлов журналов исключений (Windows) - PullRequest
13 голосов
/ 21 января 2009

Вопрос о том, куда должны вести журналы исключений, обсуждался здесь один или два раза (или более), и одна из рекомендаций заключалась в том, что приложение никогда не должно записывать в папку установки.
Однако, если я помещаю журналы в% appdata%, это означает, что у каждого пользователя есть свой собственный набор журналов. Я бы предпочел иметь все журналы в одном месте.
В одной из последних проблем MSDN mag наличие отдельной подпапки для журналов в папке установки (например,% programfiles \ myapp \ logs) называлось допустимым исключением из правила. Конечно, ACL для этой папки должен быть настроен соответствующим образом.
Является ли наличие папки журнала в папке установки обычной практикой или абсолютным запретом? Где вы положили журналы исключений?

Edit:
На самом деле мы используем log4net, поэтому местоположение и тип ведения журнала полностью настраиваются. Тем не менее, я хочу иметь разумный дефолт. Я предпочитаю иметь файл над журналом событий. Для большинства пользователей файл гораздо проще обрабатывать, чем журнал событий.
Однако предположим, что я хочу иметь файлы. Можно ли иметь папку журнала в папке установки?

Ответы [ 7 ]

9 голосов
/ 21 января 2009

Для окон используйте журнал событий. Создать собственный журнал довольно просто, или вы можете просто добавить свои сообщения в одно из стандартных.

Преимущество заключается в том, что почти все технологии (и программисты) на планете ожидают, что что-то появится в журнале событий, когда что-то пойдет не так.

8 голосов
/ 21 января 2009

Для входа в общий файл без специальных ACL, используйте что-то вроде

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

которая ссылается на папку в

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

на XP и что-то вроде

C:\ProgramData\MyCompany

под Vista. Вам нужно убедиться, что папка существует в какой-то момент - возможно, при запуске приложения.

6 голосов
/ 21 января 2009

В новой версии ОС Vista и Win 2008 для записи в каталог программных файлов может потребоваться ACL или виртуализация в папке пользователя. Я бы предложил настроить каталог в% AllUsersProfile% таким образом, чтобы у вас было одно общее расположение для всех файлов журнала пользователя, и вашим приложениям не нужно запускаться с правами администратора для их записи.

2 голосов
/ 21 января 2009

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

1 голос
/ 21 января 2009

Я думаю, вы должны предпочесть папку AppData, но если вы хотите объединить все журналы в одной папке, тогда используйте каталог всех пользователей (Environment.SpecialFolder.CommonApplicationData) и создайте подпапки в папке приложения для каждого пользователя. Таким образом, вы не только избавляетесь от проблем с разрешениями, но и не загромождаете свое собственное пространство :) ИМХО.

1 голос
/ 21 января 2009

Вы должны следить за разрешениями на запись в папку журнала.

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

1 голос
/ 21 января 2009

Это зависит в основном от приложения, поэтому я думаю, что есть так много возможных ответов.

Для веб-сайтов у меня будет «C: \ log» на сервере, затем «C: \ log \ website» для отдельных веб-сайтов и использование Log4Net или аналогичного.

Для веб-служб, оконных служб, запланированных заданий и т. Д. Я бы записывал в журнал событий Windows. Мой компьютер -> Управление -> Системные инструменты -> Просмотр событий -> (My Sevice)

Для приложения Windows, которое развернуто в среде, которой я управляю (т.е. внутри компании), я получаю по электронной почте отчеты об исключениях "ИТ-команды".

Для приложения Windows, распространяемого неизвестным пользователям. Ничего не делать.

...