2017-02-18 1 views
0

저는 Windows 서비스에서 log4net을 작성하는 데 매우 좌절감을 느낍니다. Google에서 검색을 시도했지만 문제가 해결되지 않았습니다. 여기 Windows 서비스에서 Log4net이 작동하지 않습니다.

내의 App.config입니다 :

주요 기능에서 program.cs에서
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />  
    </configSections> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 

    <appSettings> 
    <add key="ApplicationSettings" value="Configurations/ApplicationSettings.json" /> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 

    <!-- log4net rolling file configuration --> 
    <log4net debug="true"> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="100KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
    </log4net> 

    <system.web> 
    <membership defaultProvider="ClientAuthenticationMembershipProvider"> 
     <providers> 
     <add name="ClientAuthenticationMembershipProvider" 
      type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" /> 
     </providers> 
    </membership> 
    <roleManager defaultProvider="ClientRoleProvider" enabled="true"> 
     <providers> 
     <add name="ClientRoleProvider" 
      type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" /> 
     </providers> 
    </roleManager> 
    </system.web> 
</configuration> 

, 나는 호출 시도 :

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
XmlConfigurator.Configure(); 

Main.cs (내 서비스)의 ONSTART 함수에서 I 시도 :

아무 일도 발생하지 않지만 로그를 쓸 때 로그 파일이 나타나지 않습니다.

아무도 도와 줄 수 있습니까?

나는 하루 종일 해결책을 찾지 만 아무 것도 찾지 못했습니다.

<appender name="RollingFileAppender" 

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 

이름은 위의 일치해야합니다 :

는 위의 구성 문제를 가지고있는 것처럼

+2

서비스를 실행중인 계정은 무엇입니까? 계정에 로그인하려는 폴더에 ** 쓰기 ** 액세스 권한이 있습니까? – MickyD

+0

ProjectInstaller를 LocalSystem으로 설정했습니다. – Redplane

+0

파일을 찾을 수 없으면 가장 흔한 사고가 될 것입니다. 운영 체제 디렉토리에 로그 파일을 작성하는 것이 건강에 좋지 않으며 마지막으로 보게됩니다. 파일 경로를 지정하지 않았으므로 프로그램의 기본 작업 디렉토리에 기록됩니다. 서비스 중 c : \ windows \ system32 또는 c : \ windows \ syswow64 –

답변

1

것 같습니다, 감사합니다. 예를 들어 둘 다 RollingFileAppender으로 설정해야합니다.

또한 로그 파일 작성과 관련하여 이전에는 보안 문제로 인해 발생한 프로그램 파일 디렉토리 나 가상 디렉터리의 로그 파일을 어디서나 쓰지 않으려 고합니다. 현재 나는 내 모든 log4net 로그 파일에 대해 다음과 같은 것을 사용하고 있습니다 :

<file type="log4net.Util.PatternString" value="${ALLUSERSPROFILE}/<Product Name>/Logs/<Program Name>/<Program Name>.log" /> 

${ALLUSERSPROFILE} 위의 열쇠입니다. 일반적으로이 디렉터리에는 가상 디렉터리 및 프로그램 파일 디렉터리와 같은 보안 제한이 없습니다. 나는이 길을 사용하고있어서 아무런 문제가 없었 음을 알았다.

이 envrionment 변수는 Windows Vista, 7, 8, Server 2008 등에서 ProgramData 디렉토리로 이동합니다. XP는 당신을 다른 장소로 데려가지만 편안한 권한을 가진 디렉토리라고 생각합니다. 파일 탐색기에 % allusersprofile %을 입력하면 거기에 있습니다.

관련 문제