【问题标题】:How to create log.txt using log4net?如何使用 log4net 创建 log.txt?
【发布时间】:2015-10-13 07:51:03
【问题描述】:

我可以创建日志,但无法向其中写入异常字符串...logs.txt 仍然为空...

这是 catch 块:

 catch (Exception ex)
            {
                Logging.LogError(ex.ToString());
                return new DataTable();
            }

Logging.cs:

public class Logging
{
    public readonly ILog log = LogManager.GetLogger(typeof(Logging));
    public static void LogError(string exception)
    {
        log4net.Config.XmlConfigurator.Configure();
    }
}

网络配置:

<log4net>
    <appender name="file" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Logs\Log_%date{dd-MM-yyyy_HH-mm-ss}.txt"/>
      <appendToFile value="true"/>
      <maxSizeRollBackups value="-1"/>
      <!--infinite-->
      <staticLogFileName value="true"/>
      <rollingStyle value="Once"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="file"/>
    </root>
  </log4net>

【问题讨论】:

  • 你需要实际登录log4net,在哪里完成? (提示:无处),试试 log.Error(exception);
  • 如何登录log4net???帖子更新了!

标签: c# asp.net-mvc logging log4net


【解决方案1】:
public static class Logging
{
    private static ILog _logger = null;
    private static log4net.ILog Logger
    {
        get
        {
            if(_logger == null)
            {
                _logger = LogManager.GetLogger(typeof(Logging));
                log4net.Config.XmlConfigurator.Configure();
            }
            return _logger;
        }
    }

    // Better to use Exception object. This gives you more details
    public static void LogError(string msg, Exception ex)
    {
         Logger.Error(msg, ex);
    }

检查您的网络服务器上的权限并使用日志文件的完整路径。对于 log4net,也可以使用 debug="true"。这是工作 log4net 配置的示例,它根据大小滚动文件。您可以稍后更改。

  <log4net debug="true">
    <root>
      <level value="ALL" />
      <appender-ref ref="file" />
    </root>
    <appender name="file" type="log4net.Appender.RollingFileAppender, log4net">
      <file value="wwwroot\logs\Log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maximumFileSize value="1MB" />
      <maxSizeRollBackups value="5" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%-5level] (%thread) %logger - %message%newline" />
      </layout>
    </appender>

【讨论】:

  • 获取logger后不应该调用Configuration,而是建议直接在正在使用的类中使用logger,以便从命名空间组织中受益
  • 我知道直接在课堂上使用的好处。这是 TS 代码 :) 调用配置有什么问题?
【解决方案2】:

把你的班级改成

public class Logging
{
    public static readonly ILog log = LogManager.GetLogger(typeof(Logging));
    public static Logging()
    {
        log4net.Config.XmlConfigurator.Configure();
    }
    public static void LogError(string exception)
    {
        log.Error(exception);
    }
}

【讨论】:

  • 错误 1 ​​'Logging.Logging()':静态构造函数上不允许访问修饰符
【解决方案3】:

要使用 log4net,您需要:

  • 配置 log4net:查看site 上提供的示例,了解如何在配置文件中进行配置
  • 初始化log4net:你需要在你的应用程序开始时进行初始化,例如使用log4net.Config.XmlConfigurator.Configure();
  • 在您要记录数据的类中实例化一个记录器: private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
  • 使用记录器记录:log.Info("Exiting application.");

在您的示例中,您需要在 catch 块所在的类中声明记录器,在应用程序开始时初始化 log4net,并使用实例记录异常

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2011-10-26
    • 2018-05-13
    相关资源
    最近更新 更多