我能够使用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) 我一直在使用log4net,所以我不是很新的.但这是我在Windows Server 2008 R2 64位计算机上部署的第一个更大的.NET 4.0解决方案.
当然,我先搜索并找到类似的主题.一个主题听起来完全相同 - 运行在发布模式下构建的.Net 4.0 Windows应用程序时,log4net不会记录 - 但我的问题仍然不同.
我的解决方案的一部分是使用log4net的控制台应用程序.一切正常,直到我切换到发布版本.在我的电脑上测试期间它仍然正常.但是在服务器端,log4net将不再起作用.
所以我启用了log4net内部调试.这指向存储库冲突.我从来没有深入到log4net深入了解它.但问题似乎是它首先为域程序集(CRMFacade.Domain)创建一个存储库,然后尝试为控制台应用程序(CRMFacade.DataImport)创建一个存储库.此操作失败,因为已存在默认存储库:
log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [Global Assembly Cache]. (.NET Runtime [4.0.30319.225] on Microsoft Windows NT 6.1.7601 Service Pack 1)
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: DefaultRepositorySelector: Creating repository for assembly [CRMFacade.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]
log4net: DefaultRepositorySelector: Assembly [CRMFacade.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Program Files (x86)\CRMFacade.DataImport\CRMFacade.Domain.dll]
log4net: DefaultRepositorySelector: Assembly [CRMFacade.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: DefaultRepositorySelector: Assembly …Run Code Online (Sandbox Code Playgroud) 我有一个控制台应用程序,并有一个包装Log4Net方法的类库.现在,当在调试模式下运行应用程序时,它会写入日志,但是当它在发布模式下构建时,它不会写入日志文件.这会是什么解决方案?示例代码和配置文件如下所示
我的开发环境是
控制台应用
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
log4net.GlobalContext.Properties["LogFileName"] = "TestLogin.txt";
Logger log = new Logger(typeof(Program));
log.Info("Logging is enabled!!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台应用程序中的App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value ="%property{LogFileName}"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level - %message%newline%exception" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration> …Run Code Online (Sandbox Code Playgroud)