Подтвердить что ты не робот

Лучшее место для файлов журналов исключений (Windows)

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

C:\ProgramData\MyCompany

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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