2010-01-07 6 views
5

Я использую log4net и полностью настраиваю его с помощью param name = "File" value = "C: \ Application.log". Однако файл не создан в C :. Я запускаю Windows 7 и, возможно, что-то вроде разрешений, препятствует созданию файла.Файл журнала не создан?

Вот app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" /> 
    </configSections>` 

    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender“ type=“log4net.Appender.RollingFileAppender" > 
     <param name="File" value="C:\Users\Mohit\Documents\Application.log" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern“ value=“%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

ответ

7

Необходимо предоставить реальное имя файла. То, что вы определили в своей конфигурации, - это имя папки. Вместо того, чтобы:

<param name="File" value="C:\Users\Mohit\Documents" /> 

использовать что-то вроде:

<param name="File" value="C:\Users\Mohit\Documents\log.txt" /> 

Кроме того, вам, возможно, потребуется повышенные разрешения для приложения записи журнала в корневой папке C:. UAC не позволит вам писать в корневую папку.

Как сказал Энди, вы будете лучше выбрать какие-то вложенные пользователь Windows папки как:

c:\Users\Mohit\AppData\Local\<MyApplication> 

log4net имеет некоторые предопределенные переменные, которые можно использовать для целевых специальных папок. Есть несколько вопросов о том, что здесь на SO:

How to specify common application data folder for log4net?

C# how to specify the appData file path in the app.config file

1

Да, убедитесь, что пользователь, который выполняет приложение имеет разрешения на запись в C :.

Еще лучше, вы, вероятно, не хотите писать свой журнал приложений в корневой каталог c: \. Вероятно, было бы лучше выбрать место, где будет установлено ваше приложение, или где-нибудь под документами и настройками (или эквивалентом Windows 7).

+0

Также убедитесь, что приложение указано в регистраторе. Легко пропустить.Если вы запускаете приложение в режиме отладки в VS, вы можете использовать приложение трассировки, и вывод журнала будет отображаться в окне вывода, очень полезный, если сам Log4Net что-то скажет. – Skurmedel

1

Моя проблема была в порядке разделов в моем файле App.config. Сначала у меня был раздел <startup>, затем мой <configSections>. По какой-то причине я не получал ошибку в моем приложении Windows, но это действительно приводило к ошибке в приложении консоли. Видимо <configSections> должна быть первой секции под <configuration>

Таким образом, вместо этого:

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

ли это:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
0

Что решена моя проблема была в основном what CTBrewski posted here (+1 btw!), но мой App.config было запись appSettings не является записью configSections.

Я переместил запись AppSettings с моей Log4Net записью конфигурации над входом запуска и журналы затем записывается в профиль пользователя:

<configuration> 
    <appSettings> 
    <add key="log4net.Config" value="log4net.config" /> 
    <add key="log4net.Config.Watch" value="True" /> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    </startup> 
    ... 
    ... 

И тогда, конечно, мой Appender выглядит следующим образом:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="${LOCALAPPDATA}/Synclio/Logs/SynclioWin.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="5000KB" /> 
    <maxSizeRollBackups value="2" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
    </appender> 
+0

Nice edit @Philipp, мне нужно будет помнить, как использовать языковые помощники, поскольку я люблю синтаксическую раскраску. – jmort253