无权使用 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 上的磁盘的主要内容,如果未能解决你的问题,请参考以下文章