【发布时间】:2018-05-31 09:20:15
【问题描述】:
我有这个 log4net 的代码,它只适用于几行,但在这之后就停止了,这很奇怪!
这里是代码
public void SyncPR5600(int serviceId)
{
Logger.Info("Starting execution of {0} out of task");
Task.Factory.StartNew(() =>
{
string tableName = "PR5600";
Logger.Info(string.Format("Starting execution of {0}", tableName));
});
}
Logger 的第一行被 log4net appender 记录,但 Task.Factory.StratNew 中的后一行停止工作。
令人惊讶的是,相同的代码可以在控制台应用程序中运行,但是当移动到 Windows 服务时,它会停止记录。
这是大错特错!
[更新1] Log4net 配置
<log4net>
<appender name="ErrorsLog" type="log4net.Appender.RollingFileAppender">
<file value="${PROGRAMDATA}\DEVIT\eProc\" />
<appendToFile value="true" />
<param name="DatePattern" value="yyyy-MM-'CadRmsSyncService_Errors.log'" />
<staticLogFileName value="false" />
<maximumFileSize value="100GB" />
<maxSizeRollBackups value="0" />
<param name="Threshold" value="WARN" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p - %m%n" />
</layout>
</appender>
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<file value="${PROGRAMDATA}\DEVIT\eProc\" />
<appendToFile value="true" />
<param name="DatePattern" value="yyyy-MM-'CadRmsSyncService_Info.log'" />
<staticLogFileName value="false" />
<maximumFileSize value="100GB" />
<maxSizeRollBackups value="0" />
<param name="Threshold" value="DEBUG" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p - %m%n" />
<IgnoresException value="False" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="ErrorsLog" />
<appender-ref ref="InfoLog" />
</root>
【问题讨论】:
-
你能发布你的 log4net 配置吗?
-
另外,
Logger是什么? -
@pixelbadger 查看有问题的更新
-
@Matan Shahar - 它在内部使用 log4net 进行日志记录。这是一个常用的日志类。
-
默认情况下 ProgramData 具有受限权限 - 一个用户创建的文件不能被另一个用户修改。默认情况下,Windows 服务将以与您自己的 Windows 帐户不同的用户身份运行。您是否可以删除现有的日志文件,然后运行您的 Windows 服务,而不首先将其作为控制台应用程序运行?
标签: c# log4net log4net-configuration