2015-01-29 3 views
0

Windows 서비스를 만들었으며 Windows 서비스가 내 사용자 프로필 아래에 만들어진 로그 파일에 정보를 기록하도록합니다. common.logging을 사용하고 있습니다. 내 로그 설정을 다음과 같이 지정했습니다.Windows 서비스가 로그 파일에 특수 폴더로 로그인하지 않습니다.

<configSections> 
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    <sectionGroup name="common"> 
     <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> 
    </sectionGroup> 
    </configSections> 

    <common> 
    <logging> 
     <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1213"> 
     <arg key="configType" value="INLINE" /> 
     </factoryAdapter> 
    </logging> 
    </common> 

    <log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %l - %m%n" /> 
     </layout> 
    </appender> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %l - %m%n" /> 
     </layout> 
    </appender> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net"> 
     <file value="${USERPROFILE}\Logs\Log.txt"/> 
     <appendToFile value="true"/> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="DEBUG"/> 
     <levelMax value="FATAL"/> 
     </filter> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="FileAppender" />  
     <appender-ref ref="EventLogAppender" /> 
    </root> 
    </log4net> 

그러나 Windows 서비스는 사용자 프로필 아래에 만든 로그 파일에 로그인하지 않습니다. 서비스는 로컬 시스템 계정에서 실행됩니다. 문제에 대한 리드를 얻고 싶습니다 .event 로그는 파일 appender가 작동하지 않는 경우에만 올바르게 작동합니다.

+0

권한 설정이 - 실제로 이상한 동작임을 확인했다고 가정합니다. –

답변

0

서비스가 특수 폴더와 다른 경로를 가진 다른 사용자 프로필이라고 말한 것처럼 시스템 계정에 서비스가 기록됩니다. 이것을 처리하는 가장 간단한 방법은 폴더에서 관리 폴더로 심볼릭 링크를 넣는 것입니다. mklink을 사용하면됩니다.

+0

당신의 정확한 나는 사용자 프로필에 대한 아주 명백한 부분을 놓쳤다 고 생각합니다. 로컬 시스템 계정 사용자 프로필 아래에 로그가 생성됩니다. 귀하의 의견에 감사드립니다. 귀하의 의견에 감사드립니다. mklink는 위험 할 수 있습니다.이 도구에 대한 설치 프로그램을 만들고 mklink는 최종 사용자를위한 문제는 서비스 및 사용자가 모두 액세스 할 수있는 장소에서 로그를 작성해야합니다. – pubudut

+0

mklink는 모든 Windows 시스템에서 CMD에 내장되어 있으므로 사용할 수 있습니다. 루트 로그에 대한 읽기 권한이 있으면 mklink를 실행할 수 있습니다. 또한 log4net을 사용하기 때문에 네트워크 리스너를 설정하고 사용자가 프로파일을 사용하여 로그를 수집하도록 할 수 있습니다. – rerun