log4net - Aplder在IIS7.5中不起作用

Ste*_*eve 15 iis log4net asp.net-3.5 visual-studio-2008 windows-7

我能够使用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>
Run Code Online (Sandbox Code Playgroud)

C#

log4net.Config.XmlConfigurator.Configure();
ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Log.Info("This is a test");
Run Code Online (Sandbox Code Playgroud)

有线索吗?

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,但我作为nonAdmin登录到Windows 7.此外,我正在运行Windows 7 Home Premium,而非Professional.

我向网络根目录授予了NETWORK SERVICE完全权限,但仍然没有创建文件.还给了每个人完全许可,没有文件.

由于adoDotNetAppender不起作用(但在开发IIS中也没有),我认为除了文件权限之外可能还有另外一个问题.

更新3:

我让它为IIS7上的FileAppender工作.如果我添加这个:

<identity impersonate="true"
    userName="zzz"
    password="yyy" />
Run Code Online (Sandbox Code Playgroud)

如果用户是管理员,它可以工作.如果是我,而不是管理员,则不是.所以这是一个权限问题.但我确实授予了EVERYONE以前写入文件的目录的权限,并且它不起作用,因此在其他地方有一个权限设置.此外,虽然FileAppender现在可以使用模拟,但AdoNetAppender stil不在IIS7中.我尝试添加:

<securityContext type="log4net.Util.WindowsSecurityContext">
    <userName value="zzz" />
    <password value="yyy" />
    <domain value="aaa" />
</securityContext>
Run Code Online (Sandbox Code Playgroud)

到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
Run Code Online (Sandbox Code Playgroud)

我打开了SQL Profiler,没有任何内容可以使用SQL Server.此外,SQL Server帐户具有执行插入的适当权限.此外,我删除了SecurityContext部分,因为log4net无法识别它的一部分.

Gar*_*ett 42

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

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

这会将调试消息写入控制台和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>
Run Code Online (Sandbox Code Playgroud)

或者,跟踪消息也会写入系统调试器,因此您可以使用DebugView之类的实用程序来捕获消息.有关详细信息,请参阅log4Net常见问题解答.


Ste*_*eve 5

我补充道,我终于开始工作了

<trust level="Full" />
Run Code Online (Sandbox Code Playgroud)

到system.web.

使用medium,AdoNetAppender停止工作,但FileAppender仍可用于中等和高.