无权使用 log4net 从 .NET 应用程序写入 Windows Server 2008 上的磁盘

Posted

技术标签:

【中文标题】无权使用 log4net 从 .NET 应用程序写入 Windows Server 2008 上的磁盘【英文标题】:No permission to write to disk on Windows Server 2008 from .NET application with log4net 【发布时间】:2013-07-17 14:21:39 【问题描述】:

我编写了一个简单的应用程序,它 ping 我的网络服务以查看它是否已启动,并将事件记录到一个文件中,使用 log4net 来记录它。

它在我的开发机器上运行良好,但是当我将程序集放在其他 Windows Server 2008 机器上(这也与运行我 ping 服务的服务器不同)时,程序不会创建日志文件。

我从管理员组中的帐户运行它,尝试将其放在服务器上的不同目录中,以“管理员身份”运行它,将文件夹的所有权限授予我在服务器上拥有的所有用户组,但仍然没有日志文件。

在事件日志中没有错误消息和事件消息。

这些是我的 log4net 配置文件。设置:

<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
  <file value="MyServiceLog.txt" />
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%propertyNDC] – %message%newline" />
  </layout>
</appender>
<root>
  <level value="ALL" />
  <appender-ref ref="FileAppender" />
</root>

【问题讨论】:

您检查过服务器上的日志,看看应用程序是否出现错误? 是的。我检查了应用程序和安全日志,没有错误,实际上没有关于应用程序活动的条目。我知道该进程肯定正在运行,但我看到它是窗口。 如果应用程序无法写入服务器,那么它应该抛出异常,这应该在应用程序的窗口中可见。 也许 log4net 吃掉了异常……有没有办法告诉他把异常冒泡出来?也许我会自己尝试 file.write() 看看是否发生了什么...... 我刚刚放弃并使用 System.IO.File.WriteAllText(LOG_PATH, text) 写入文件 - 在每个地方都很好用。 Log4net 一定有问题。除了编译器放入的目录之外,它也无法在我的机器上运行。 【参考方案1】:

您应该将文件夹名称放在:

<file value="MyServiceLog.txt" />

改成:

<file value="c:\dirIown\MyServiceLog.txt" />

确保您在c:\dirIown 上授予用户访问权限

【讨论】:

试图将它放在不同的目录中。最终我自己用 file.write()..

以上是关于无权使用 log4net 从 .NET 应用程序写入 Windows Server 2008 上的磁盘的主要内容,如果未能解决你的问题,请参考以下文章

log4net 发布到生产环境不写日志的解决方法

使用了log4net,发布系统后,发现无法写日志了,怎么办

C# log4net 多线程问题

C# 使用Log4Net记录程序日志

[VS] [C#] 替项目加入 log4net 吧~

一个不需要Log4Net的写日志的简单方法