Я внедряю решение для ведения журналов с помощью Log4Net для службы Windows NT. Я могу переключить переключатель в файле конфигурации, чтобы начать запись информации в файловую систему. До сих пор мне удавалось добиться этого, имея накатанный файл appender и log4net «Наблюдать» за файлом конфигурации.
Что я заметил, так это то, что Log4Net создаст пустые файлы журналов, как только служба запустится, даже если все журналы отключены и я не собираюсь регистрироваться.
Я не могу найти больше информации по этой теме, кроме этой записи:
Как отключить создание пустого файла журнала при запуске приложения?
Меня беспокоит то, что кто-то может настроить службу с набором разрешений очень низкого уровня, который даже не будет иметь доступа для создания файлов журнала в файловой системе. Я не хочу понизить производительность из-за того, что исключения возникают каждый раз, когда я нажимаю на оператор записи, даже если я не собирался регистрироваться.
Я завернул каждый оператор ведения журнала проверкой, чтобы убедиться, что уровень ведения журнала включен, прежде чем пытаться войти в систему, но я все еще не уверен, будут ли во внутренних работах log4net генерироваться исключения, если файл, настроенный в приложении, не был создан.
if (logger.IsDebugEnabled)
{
logger.DebugFormat(format, traceMessage);
}
Кто-нибудь знает, что будет делать log4net, если он не сможет изначально создать файлы журнала?
Вот небольшая информация о моей конфигурации. Ведение журнала работает нормально, когда оно включено, я просто беспокоюсь о проблемах с разрешениями.
Атрибут в моем классе журналирования для отслеживания изменений конфигурации:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Logging.config", Watch = true)]
Appender:
<appender name="Test" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value=".\\AppLogs\\_test.%appdomain.log" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ALL" />
<levelMax value="FATAL" />
<acceptOnMatch value="false"/>
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="Test" />
</filter>
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="6MB" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>