【问题标题】:log4net logging not creating log filelog4net 日志记录未创建日志文件
【发布时间】:2011-02-12 22:21:25
【问题描述】:

我不确定这是否是发布此问题的正确论坛。但我只是希望这里有人过去使用过 log4net,所以希望能得到一些帮助。

我正在使用 log4net 来记录我的异常。配置设置如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 </configSections>
 <log4net debug="false">
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="C:\Logs\sample.log" />
   <appendToFile value="true"/>
   <rollingStyle value="Size"/>
   <maxSizeRollBackups value="10"/>
   <maximumFileSize value="10MB"/>
   <staticLogFileName value="true"/>
   <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%-5level %date %logger.%method[line %line] - %message%newline"/>
   </layout>
 </appender>
 <root>
  <level value="INFO"/>
  <appender-ref ref="RollingLogFileAppender"/>
 </root>
</log4net>
</configuration>

我开始将此配置添加到 web.config,但出现错误(VS studio 找不到 log4net 的架构-“找不到元素 log4net 的架构信息”)。所以我点击了这个链接 (Log4Net "Could not find schema information" messages) 并在一个单独的 xml 文件中配置了我的设置,并在我的AssemblyInfo.cs 中添加了以下代码行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlfile.xml", Watch = true)]

而在实际代码中,我放置了这一行:

public void CreateUser(String username, String password)
{
 try
 {
  log.Info("Inside createuser");
  //code for creating user
 }
 catch(exception e)
 {
  log.Info("something happened in create user", e);
 }
}

问题是没有创建日志文件。我在 C:\Logs 中看不到任何内容。谁能告诉我我在这里做错了什么?

任何建议/意见都会非常有帮助。

提前谢谢大家。

【问题讨论】:

    标签: c# configuration log4net


    【解决方案1】:

    如果不将其添加到 Global.asax 中的 Application_Start,我无法使 Asembly.cs 中的设置正常工作:

    log4net.Config.XmlConfigurator.Configure();
    

    【讨论】:

    • 这需要配置在 app/web.config 中
    • 不一定。该方法有几个可以使用的重载。
    • 我明白了,我的印象是您建议使用不带参数的重载...
    【解决方案2】:

    您的日志文件没有被创建可能是因为 ASPNET 用户没有写入C:\Logs\ 目录的权限。确保您向 ASPNET 授予在您的应用程序想要创建日志文件的任何位置的完全权限。

    【讨论】:

      【解决方案3】:

      所以你正在加载配置文件,但是你是否像这样设置日志变量

      private static readonly ILog log = LogManager.GetLogger(typeof(Program));
      

      【讨论】:

        【解决方案4】:

        除非您为单独的配置文件指定完整路径,否则 log4net 期望文件位于以下返回的路径中:

         System.AppDomain.CurrentDomain.BaseDirectory
        

        如果您有一个简单的控制台应用程序,这通常表示包含程序集的目录,但在其他情况下不一定如此。有很多方法可以解决这个问题(参考我的回答 here)。

        首先,将 log4net 配置放回 app/web.config 并忽略架构 警告 可能更容易。如果日志记录有效,那么您可以确定您没有权限问题,并且可以转到下一步将配置保存在外部文件中。

        您正在编写什么样的应用程序?也许我的回答可以更具体一点……

        【讨论】:

        • 感谢您的回复。我正在使用一项服务。现在问题已经解决了。显然,配置服务本身存在一些问题。一旦解决了这个问题,其他一切都正常了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多