Windows 서비스에서 log4net을 실행하고 싶습니다. 그리고 그것은 단순히 불가능합니다.Log4net 및 Windows 서비스. 이 작업을 위해 무엇을해야합니까?
먼저 Win 형태로 작업하십시오. 여기
내가 Windows 서비스와 함께 할 것입니다 :어셈블리에 추가
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
내 설정 :
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log-file.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c: %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
내 클래스 :
public class LogProvider
{
private ILog _Log;
public LogProvider(string className)
{
XmlConfigurator.Configure();
_Log = LogManager.GetLogger(className);
}
public void Info(object message)
{
_Log.Info(message);
}
}
과의 주 프로그램 :
using log4net;
using log4net.Config;
(...)
private LogProvider _logProvider;
(...)
_logProvider = new LogProvider("Test");
_logProvider.Info("asds");
향후 진행될 작업은 무엇입니까?
위의 코드는 약 100 버전 이상이므로 샘플 프로젝트를 보여주십시오. 나는 이것이 Windows 서비스를 사용하는 log4net을 사용하는 것이 불가능하다고 믿기 시작합니다.
UPDATE :
그래서, 권한에 대한 : 는 사실은 내가 사용 권한에 대한 예외를 얻을. 나는이 줄 (requirePermission = "false")으로 이것을 고친다. :
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
이제는 예외없이 예외가있다.
이 내 마지막 간부 코드 :
protected override void OnStart(string[] args)
{
try
{
LogProvider lp = new LogProvider("asd");
lp.Info("asd2");
}
catch (Exception ex)
{
System.IO.FileInfo _file;
System.IO.StreamWriter _writer;
_file = new System.IO.FileInfo("D:\\Log\\asdCatch.txt");
_writer = _file.CreateText();
_writer.WriteLine("[" + DateTime.Now.ToString() + "] Init Log");
_writer.WriteLine("[" + DateTime.Now.ToString() + "] " + ex.ToString());
_writer.Close();
}
}
지금 내가 정말 혼란스러워하고있어, 내가 다른 Windows 서비스를 만들었하고 일하고있어 - 권한이 그 선없이. 세상에, 이상 하네.
업데이트 2 : 확인해 봤습니다. 이런 일이 어떻게했는지는 모르겠지만, 나는 나의의 app.config에서 그 라인을 발견 :
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
I 15 - 하위 프로젝트 프로그램에서 일하고 있어요 그것이 어디에서 왔는지 진지하게, 나도 몰라를 :/
당신은 무엇을 관찰 할 수 있습니까? 던져지는 예외가 있습니까? 또는 단순히 예상 한 결과를 산출하지 못합니까? –
시작시 "asds"를 로깅해야합니다. 새 파일이 없습니다. 나는 C : \\ i D : \\ {tmp}에서 내 dir 앱에서 직접 시도했습니다. – Marshall
그러면 크래시 또는 예외가 발생하지 않습니다. procmon (SysInternals 도구)을 사용하여 Windows 서비스를 보았습니까? 모든 파일 시스템 액세스를 보여줍니다. –