首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >log4net -附加器在IIS7.5中不起作用

log4net -附加器在IIS7.5中不起作用
EN

Stack Overflow用户
提问于 2010-06-26 07:00:58
回答 7查看 21.3K关注 0票数 15

我可以使用log4net和Cassini/ IIS7.5服务器写入日志文件,但是当我使用IIS7.5时,我不能写入文件。

最初,我得到了一个安全异常,所以我添加了requirePermission="false",异常消失了,但没有创建任何文件。

根据IISM,信任级别已满。

我不能在我自己的机器上工作,我想知道当我转到ISP (discountASP)时会发生什么。

下面是log4net的设置:

代码语言:javascript
复制
<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#

代码语言:javascript
复制
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上工作。如果我加上这个:

代码语言:javascript
复制
<identity impersonate="true"
    userName="zzz"
    password="yyy" />

如果用户是管理员,它就可以工作。如果是我,而不是管理员,它就不是,所以这是一个权限问题。但是我之前已经授予了每个人对该文件写入的目录的权限,但它不起作用,所以在其他地方设置了权限。此外,虽然FileAppender现在可以使用模拟,但AdoNetAppender仍然不能在IIS7中使用。我尝试添加:

代码语言:javascript
复制
<securityContext type="log4net.Util.WindowsSecurityContext">
    <userName value="zzz" />
    <password value="yyy" />
    <domain value="aaa" />
</securityContext>

转到AdoNetAppender部分,但仍然变得静默失败。

我为任何能帮助我让AdoNetAppender与IIS7.5.一起工作的人添加了一笔赏金。

更新4:

我终于找到了堆栈的踪迹。这就是它:

代码语言:javascript
复制
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无法识别其中的一部分。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-30 00:55:12

“我终于让它工作了,”我补充道

代码语言:javascript
复制
<trust level="Full" />

敬system.web。

使用medium时,AdoNetAppender停止工作,但FileAppender仍可用于medium和high。

票数 5
EN

Stack Overflow用户

发布于 2010-06-27 15:19:42

您可以通过将密钥log4net.Internal.Debug添加到应用程序配置文件来启用log4net内部调试。

代码语言:javascript
复制
<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

这将向控制台和System.Diagnostics.Trace系统写入调试消息。然后,通过将跟踪侦听器添加到配置文件,可以将这些消息记录到文本文件中。确保应用程序具有写入文件的权限。

代码语言:javascript
复制
<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

票数 44
EN

Stack Overflow用户

发布于 2010-06-26 07:12:10

使用process Monitor之类的工具监视IIS进程。我怀疑它试图在IIS帐户无权访问的目录中创建日志文件。

测试结束后,指定IIS进程有权访问的日志文件的绝对路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3121975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档