我可以使用log4net和Cassini/ IIS7.5服务器写入日志文件,但是当我使用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");
有什么线索吗?
Windows3.5、VS2008、Windows7、ASP.NET 7.5、log4net 1.2.10
编辑:
我使用了在Cassini中运行的测试web应用程序,并在IIS7.5中运行它,它工作了,所以有一些特定于我的web应用程序的东西阻止了log4net的运行。里面有很多东西,ELMAH,输出缓存,AJAX控件工具包,表单身份验证,ssl,url重写,等等……除了将这些添加到测试应用程序之外,有没有更好的方法来找出导致log4net工作的原因?
更新:
我使用AdoNetAppender来避免文件权限问题,并且仍然得到相同的结果。AdoNetAppender适用于在卡西尼和IIS上运行的测试应用程序,但不适用于我的web应用程序。获取以下异常:
System.Security.SecurityException:请求'System.Configuration.ConfigurationPermission,System.Configuration类型的权限...‘失败。
更新2:我误以为测试webapp fileAppender可以在IIS7.5中工作。事情是这样的:测试webapp fileAppender和AdoDotNetAppender都可以在Cassini/ IIS7.5中工作,但不能在IIS7.5中工作。所以我认为IIS才是问题所在,而不是我的webapp。
请注意。我以管理员身份运行VS2008,但以nonAdmin身份登录到Windows7。另外,我运行的是Windows7家庭高级版,而不是专业版。
我授予网络服务对web根目录的完全权限,但仍未创建任何文件。也给了每个人完全的权限,没有文件。
由于adoDotNetAppender也不起作用(但在dev 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事件探查器,但没有任何东西连接到SQL Server。此外,SQL Server帐户具有执行插入操作的适当权限。另外,我删除了SecurityContext部分,因为log4net无法识别其中的一部分。
发布于 2010-06-30 00:55:12
“我终于让它工作了,”我补充道
<trust level="Full" />
敬system.web。
使用medium时,AdoNetAppender停止工作,但FileAppender仍可用于medium和high。
发布于 2010-06-27 15:19:42
您可以通过将密钥log4net.Internal.Debug
添加到应用程序配置文件来启用log4net内部调试。
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
这将向控制台和System.Diagnostics.Trace系统写入调试消息。然后,通过将跟踪侦听器添加到配置文件,可以将这些消息记录到文本文件中。确保应用程序具有写入文件的权限。
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
或者,跟踪消息也会写入系统调试器,因此您可以使用诸如DebugView之类的实用程序来捕获消息。有关更多详细信息,请参阅log4Net FAQ。
发布于 2010-06-26 07:12:10
使用process Monitor之类的工具监视IIS进程。我怀疑它试图在IIS帐户无权访问的目录中创建日志文件。
测试结束后,指定IIS进程有权访问的日志文件的绝对路径。
https://stackoverflow.com/questions/3121975
复制相似问题