【发布时间】:2010-06-25 23:00:58
【问题描述】:
我可以使用 log4net 和 Cassini/IIS 开发服务器写入日志文件,但是当我使用 IIS7.5 时,我无法写入文件。
最初,我遇到了一个安全异常,所以我添加了requirePermission="false",异常消失了,但没有创建文件。
根据IISM,信任级别已满。
我无法在我自己的机器上运行它,我想知道当我转移到 ISP (discountASP) 时会发生什么。
这里是 log4net 设置:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
C#
log4net.Config.XmlConfigurator.Configure();
ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Log.Info("This is a test");
有什么线索吗?
ASP.NET 3.5、VS2008、Windows 7、IIS7.5、log4net 1.2.10
编辑:
我使用了在 Cassini 中运行的测试 Web 应用程序并在 IIS7.5 中运行它并且它工作正常,因此我的 Web 应用程序有一些特定的东西阻止了 log4net 运行。有 里面发生了很多事情,ELMAH,输出缓存,AJAX 控制工具包,表单身份验证,ssl,url 重写等......除了将每个都添加到测试应用程序中,有没有更好的方法来找出导致 log4net 的原因上班?
更新:
我使用 AdoNetAppender 来避免文件权限问题,并且仍然得到相同的结果。 AdoNetAppender 适用于在 Cassini 和 IIS 上运行的测试应用程序,但不适用于我的 Web 应用程序。得到以下异常:
System.Security.SecurityException:请求“System.Configuration.ConfigurationPermission, System.Configuration...”类型的权限失败。
更新 2: 我误认为测试 webapp fileAppender 在 IIS7.5 中工作。这就是发生的情况:测试 webapp fileAppender 和 AdoDotNetAppender 都可以在 Cassini/IIS 开发中工作,但不能在 IIS7.5 中工作。所以我认为问题出在 IIS 上,而不是我的 webapp。
注意。我以管理员身份运行 VS2008,但以非管理员身份登录 Windows 7。另外,我运行的是 Windows 7 家庭高级版,而不是专业版。
我授予 NETWORK SERVICE 对 Web 根目录的完全权限,但仍然没有创建文件。还给了每个人完全的权限,没有文件。
由于 adoDotNetAppender 也不起作用(但在开发 IIS 中起作用),我认为除了文件权限之外可能还有另一个问题。
更新 3:
我让它为 IIS7 上的 FileAppender 工作。如果我添加这个:
<identity impersonate="true"
userName="zzz"
password="yyy" />
如果用户是管理员,它可以工作。如果是我,而不是管理员,它不会。所以这是一个权限问题。但是我确实授予了之前写入文件的目录的每个人的权限,但它不起作用,所以在其他地方有一个权限设置。此外,虽然 FileAppender 现在可以处理模拟,但 AdoNetAppender 仍然不能在 IIS7 中使用。我尝试添加:
<securityContext type="log4net.Util.WindowsSecurityContext">
<userName value="zzz" />
<password value="yyy" />
<domain value="aaa" />
</securityContext>
到 AdoNetAppender 部分,但仍然静默失败。
我为任何可以帮助我让 AdoNetAppender 与 IIS7.5 一起工作的人增加了奖励。
更新 4:
我终于掌握了堆栈跟踪。这里是:
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at log4net.Util.LogicalThreadContextProperties.GetProperties(Boolean create)
at log4net.Core.LoggingEvent.CreateCompositeProperties()
at log4net.Core.LoggingEvent.CacheProperties()
at log4net.Core.LoggingEvent.FixVolatileData(FixFlags flags)
at log4net.Core.LoggingEvent.set_Fix(FixFlags value)
at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent)
at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent)
The action that failed was:
LinkDemand
The type of the first permission that failed was:
System.Security.Permissions.SecurityPermission
The Zone of the assembly that failed was:
MyComputer
我打开了 SQL Profiler,但没有任何东西进入 SQL Server。此外,SQL Server 帐户具有执行插入的适当权限。另外,我删除了 SecurityContext 部分,因为 log4net 无法识别其中的一部分。
【问题讨论】:
-
您是否尝试过提升应用程序的信任级别?你能发布完整的堆栈跟踪吗?
标签: visual-studio-2008 iis windows-7 asp.net-3.5 log4net