我正在使用 log4net 将数据记录到 Windows 服务的应用程序洞察中。为此,我有以下软件包:
我已经像这样设置了记录器:
private ILog _logger = LogManager.GetLogger(typeof(MyServiceClass));
设置为使用 log4net.config 文件,如下所示:
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
XmlConfigurator.Configure(new FileInfo(Path.Combine(assemblyFolder, "log4net.config")));
出于测试目的,当服务启动时,我将在不同级别发送一些消息。
_logger.Debug("This is debug message");
_logger.Info("This is info message");
_logger.Warn("This is warning message");
_logger.Error("This is error message");
现在,当我通过 Visual Studio 调试运行我的应用程序时,它工作得非常好,并且所有数据都按照下面的屏幕截图进行记录。
我遇到的问题是,当我安装服务并运行它时,我收到的唯一消息是异常,没有任何跟踪消息,如下面的屏幕截图所示。
到目前为止我做了什么?
验证所有依赖项和配置文件是否正确(比较安装目录和调试目录 - 一切都是相同的)
启用了log4net内部调试,没有提到任何失败。
接下来我可以尝试什么?可能是什么原因造成的?非常感谢任何建议。
我的 log4net 配置中的附加程序如下,除了更新的连接字符串之外,ApplicationInsights.config 文件是 NuGet 包附带的默认文件。
<appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level: %newline %message %newline %newline"/>
</layout>
</appender>
好吧,以真正的软件工程师的方式,我在提出问题后就找到了解决方案。
如果将来有人来这里,我会发布答案。
问题是日志没有被刷新,因此没有发送。
我在服务的
OnStop()
方法以及 catch
中的 OnStart()
块中添加了以下内容,现在所有日志都可见。
LogManager.Flush(TimeSpan.FromSeconds(3).Milliseconds);