visual-studio-2008 - log4net - Appenders 在 IIS7.5 中不起作用

标签 visual-studio-2008 iis windows-7 asp.net-3.5 log4net

我可以使用 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: Request for the permission of type 'System.Configuration.ConfigurationPermission, System.Configuration...' failed.



更新 2:
我误认为测试 webapp fileAppender 在 IIS7.5 中工作。这是发生的事情:测试 webapp fileAppender 和 AdoDotNetAppender 都在 Cassini/IIS dev 中工作,但在 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 探查器,但没有任何东西进入 SQL Server。此外,SQL Server 帐户具有执行插入操作的适当权限。此外,我删除了 SecurityContext 部分,因为 log4net 无法识别其中的一部分。

最佳答案

您可以通过添加 key 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更多细节。

关于visual-studio-2008 - log4net - Appenders 在 IIS7.5 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121975/

相关文章:

c++ - 安装 thrift idl

visual-studio - 编译/调试时,VS是否应该删除bin\debug区域中的现有文件?

c++ - 进程外函数调用和返回的 HANDLE 类型 (Windows C++)

firefox - 在 Windows 7 中使用 MozRepl 对 Firefox 进行编程

windows-7 - 下载什么版本的SDK?

mysql - 从一个表获取值到另一个表

c++ - 在 Visual Studio 2008 下声明 "friend"函数失败

internet-explorer - 基本认证 : IE 11 Does Not Prompt for Credentials - Chrome and FF Do

sql-server - IIS 7 无法连接到 SQL Server 2008

javascript - 防止 Internet Explorer 11 中的过度滚动