Привет, у меня есть эта конфигурация в моем web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
но log4net не работает. Мой проект компилируется нормально, и я не получаю ошибок при отладке. Строки, в которых я говорю, log.debug("somemessage")
работают нормально, но я не могу найти mylog.log
файл, так где он?
Ответы:
Один из подводных камней для такого рода вещей - обязательно добавить
XmlConfigurator
атрибут в сборку, разместив следующую строку в вашемAssemblyInfo.cs
:В противном случае log4net никогда не активируется.
источник
AssemblyInfo
как только вы подумали.Я предполагаю, что либо log4net вообще не ведет журнал, либо файл не попадает туда, где вы этого ожидаете.
Во-первых, вы действительно звонили
в любом месте вашего кода? Если приведенный выше фрагмент xml находится в файле конфигурации приложения, этот вызов поможет. Если фрагмент xml находится в собственном файле, вам нужно будет использовать
.Configure(string)
перегрузку, которая берет путь к файлу. Без этого вызова (или, очевидно, атрибута уровня сборки, упомянутого Кирком Воллом) log4net вообще не будет вести журнал.Если вы считаете, что все это сделано и log4net должен вести журнал, то, возможно, вам следует указать полный путь к файлу журнала при дальнейшей отладке. Это позволит вам быть уверенным, где должен быть файл .
источник
Есть еще одна небольшая ошибка, см. Здесь: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
[assembly: log4net.Config.XmlConfigurator]
метод не работает с app.config. Если вы настраиваете log4net из app.config, вы должны использовать этотlog4net.Config.XmlConfigurator.Configure()
метод.источник
Вот мой контрольный список для случаев, когда log4net оказывается непокорным:
источник
Для проекта ASP.NET MVC добавление
в Global.asax.cs также помогает:
источник
Вот шаги, которые в конечном итоге заставили мой журнал файлов работать:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
в свойappSettings
.источник
У меня был опыт, когда системы регистрации выходили из строя без каких-либо исключений. Я полагаю, это имеет смысл, потому что если регистратор регистрирует ошибки, как он может регистрировать ошибку, которая не может выполнить регистрацию?
Поэтому, если файл не создан на диске, начните с проверки разрешений файловой системы. чтобы убедиться, что пользователь, под которым работает ваше приложение, может записать новый файл в это место на диске.
В целях тестирования вы можете вручную создать файл на диске, который должен быть записан, и предоставить всем разрешения на запись в него. Если регистратор начинает писать в него, значит, вы знаете, что он основан на разрешениях, а не на конфигурации.
источник
Со своей стороны, я забыл отметить файл конфигурации для копирования во время компиляции приложения.
Просто щелкните правой кнопкой мыши файл log4net.config, выберите свойство и затем выберите Копировать в выходной каталог, чтобы скопировать XXXX
источник
Я попробовал все вышеперечисленное, но ничего не помогло. Добавление этой строки в раздел app.config
configSections
сработало для меня.Убедитесь, что
Version
иPublicKeyToken
правильноисточник
говорит: «Запишите mylog.log в настоящую папку». Это означает, что если ваше веб-приложение находится под IIS, журнал будет записан в C: \ inetpub \ wwwroot \ appname \ mylog.log.
Если файла журнала нет, то, возможно, учетная запись, под которой запущено приложение, не имеет разрешения на запись в папку. Вы можете запустить Process Monitor из SysInternals, чтобы узнать, записан ли файл и куда.
Также запустите VS в режиме отладки, чтобы увидеть, не выбрасываются ли какие-либо исключения (Отладка-> Исключения-> Исключения CLR, отметьте Выброшено).
источник
В моем случае я забыл установить для свойств файла log4Net.config значение «Content», чтобы файл не был включен в развертывание. Так что обратите на это внимание:
источник
К сожалению, ничего из вышеперечисленного не помогло. Явная конфигурация в классе, который нужно регистрировать в дополнение к предыдущим предложениям настроек, помогала мне.
источник
Также через несколько часов я понял, почему у меня это не работает ...
я имел:
но это должно быть:
Так что убедитесь, что ILog находится в первой строке ....
источник