log4net не создает файл журнала на Windows Server 2003 - PullRequest
0 голосов
/ 24 марта 2012

Я использую log4net в веб-сервисе ASP.NET для регистрации.Я добавил логику инициализации для log4net в global.asax.

Я протестировал этот веб-сервис на win xp, ведение журнала работает.

Затем я развернул этот веб-сервис с помощью установщика msi в Windows Service 2003.

Я тестирую логи, но это не работает.Это не создает файл журнала.

Сначала я показываю свой код:

web.config

<?xml version="1.0"?>
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
  </configSections>

  <appSettings>
  </appSettings>

  <connectionStrings/>

  <log4net configSource="config.log4net" />

  <system.web>    
    <authorization>
      <allow users="?" />
    </authorization>
    <compilation debug="true" ></compilation>
    <authentication mode="None" />
  </system.web>

</configuration>

log4net config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="RollinFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="logs\\log" />
        <param name="AppendToFile" value="true" />
        <param name="MaxSizeRollBackups" value="10" />
        <param name="MaximumFileSize" value="10" />
        <param name="RollingStyle" value="Date" />
        <param name="DatePattern" value="_yyMMdd.\t\x\t" /> 
        <param name="StaticLogFileName" value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" />
        </layout>
    </appender>

    <logger name="mylogger">
        <level value="DEBUG" />
        <appender-ref ref="RollinFileAppender"/>
    </logger>
</log4net>

global.asax

public class Global : System.Web.HttpApplication
{    
    protected void Application_Start(object sender, EventArgs e)
    {
        XmlConfigurator.Configure();
    }
}

И я создаю объект регистратора в классе WS:

    public static ILog _logger = LogManager.GetLogger("mylogger");

использование в веб-методе:

 _logger.Info(input);

Сначала я думаю, что это проблема безопасности.

Поэтому я отредактировал permison для папки C: \ Inetpub \ wwwroot \ txs \ Logs для учетных записей:

  • ASPNET для полного управления
  • Сетевой сервис для полного управления
  • IUSR для полного управления

Ноэто не помогло.

Поэтому я отредактировал настройки для записи в виртуальной папке на IIS.Также я не помог.

Я гуглил это и нашел это: http://neilkilbride.blogspot.com/2008/03/log4net-problems-logging-from-web-app.html

Так что я попробовал.Вот отредактированный web.config .

<?xml version="1.0"?>
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
  </configSections>

  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>  
  </appSettings>

  <connectionStrings/>

<system.diagnostics>  
<trace autoflush="true">  
    <listeners>  
 <add   
     name="textWriterTraceListener"   
     type="System.Diagnostics.TextWriterTraceListener"   
     initializeData="C:\log.txt" />  
    </listeners>  
</trace>  
</system.diagnostics> 

  <log4net configSource="config.log4net" />

  <system.web>    
    <authorization>
      <allow users="?" />
    </authorization>
    <compilation debug="true" ></compilation>
    <authentication mode="None" />
  </system.web>

</configuration>

Это не помогло.Файл журнала не создан.Когда я тестировал на Win Xp, все работает.

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

EDITED : Это была проблема безопасности, я выложил в Интернет.config:

<trust level="High" />

и проблема была решена.

1 Ответ

2 голосов
/ 28 марта 2012

Попробуйте указать полный путь к файлу журнала, вы также можете попробовать заменить двойную косую черту "\" в вашем пути на одну "\".

<log4net>
    <appender name="RollinFileAppender" type="log4net.Appender.RollingFileAppender">
        ...
        <param name="File" value="c:\logs\log" />
        ...
    </appender>
</log4net>

или попробуйте посмотреть, где файл создан

RollingFileAppender rootAppender = (RollingFileAppender)((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Appenders[0];
string filename = rootAppender.File;

или вы можете перепроверить проблемы с правами на запись на сервере. На сервере сложнее, чем на xp.

...