請幫助我,我想在我的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 =「假」):現在
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
,它仍然沒有工作,沒有例外。
這是我最後的exec代碼:
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();
}
}
現在我真的很困惑,我已經創造了另一個窗口服務,它的工作 - 不經許可該行。 OMG,這很奇怪。
UPDATE2: 好的,我明白了。我不知道會這樣怎麼回事,但我發現在我的app.config該行:
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
我工作的15子項目計劃和認真,我不知道它是從哪裏來的:/
你有什麼觀察?有拋出異常嗎?或者它不會產生你期望的輸出? –
它應該在開始時記錄「asds」。沒有新文件。我嘗試在C:\\我D:\\ {tmp},直接在我的目錄應用程序.. – Marshall
然後沒有崩潰或異常。你有沒有考慮過使用procmon(SysInternals工具)來觀看你的Windows服務?它會告訴你任何文件系統訪問。 –