Как программно определить местоположение журнала приложения VB? - PullRequest
2 голосов
/ 26 января 2009

Я переоснащаю старое приложение vb.net, чтобы привести его в соответствие с принципами LUA в Vista. До сих пор приложение использовало несколько механизмов протоколирования, но основной из них заключался в записи журнала в c: \ temp \, если папка существовала. Я хочу заменить эту текущую регистрацию более стандартным механизмом регистрации.

Поскольку это VB, я решил попробовать использовать My.Application.Log в сочетании с app.config, и это работает, насколько это возможно (хотя я не ожидал, что это дамп в перемещаемый профиль). К сожалению, пользователи привыкли к устранению неполадок с информацией из журнала, а также к отправке журнала, когда они отправляют сообщение об ошибке, и перемещение этого журнала скрывает его довольно хорошо.

Моя мысль - сделать журнал немного более доступным, добавив ссылку на него или, по крайней мере, на папку, в которой он находится, в пользовательском интерфейсе приложения. Однако я не знаю, как определить, куда будет указывать эта ссылка.

Редактировать (добавить информацию):

Мой файл конфигурации более или менее встроен по умолчанию:

<system.diagnostics>
    <sources>
        <source name="Error Log" switchName="DefaultSwitch">
            <listeners>
                <add name="FileLog"/>
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
        <add name="FileLog"
             type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
             initializeData="FileLogWriter"/>
    </sharedListeners>
</system.diagnostics>

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

Если я сделаю это, я должен иметь возможность перебирать коллекцию слушателей трассировки на My.Application.Log и просто ссылаться на первый FileLogTraceListener FullLogFileName.

Ответы [ 4 ]

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

Решение заключается в использовании Microsoft.VisualBasic.Logging.FileLogTraceListener. Этот прослушиватель трассировки поддерживает получение полного пути журнала через его свойство FullLogFileName, а также настройку местоположения через свойство Location.

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

Я считаю, что это настраивается. Он может быть настроен в файле machine.config или вы можете переопределить его в файле конфигурации вашего приложения - что вы захотите сделать, чтобы вы могли контролировать его и создать ссылку на него.

Вы хотите добавить FileLogTraceListener в app.config.

Идет в разделе system.diagnostics\sharedListeners. Вы можете указать имя файла в атрибуте initializeData.

Дополнительная документация от MSDN:

0 голосов
/ 26 января 2009

Я фанат использования встроенного объекта Trace для регистрации. Кроме того, если вам нужно сохранить старое поведение использования временного файла, посмотрите на System.IO.Path.GetTempFileName().

0 голосов
/ 26 января 2009

Одной из возможностей может быть пропустить My.Application.Log в целом и перейти прямо к System.Diagnostics.TraceListener с. Я могу выбрать свою собственную папку журнала таким образом, и я точно буду знать, где она находится.

...