c# - 为整个项目配置 Log4Net

标签 c# log4net

我有以下代码,可以很好地记录所有内容。我是否必须将它添加到我所有类的构造函数中?

有没有办法为整个项目配置它?我想我可以将日志传递给所有类,但这看起来像一个困惑的解决方案。

class Program
{
    /// <summary>
    /// Application start
    /// <param name="settings"></param>
    /// <returns></returns>
    static int Main(string[] args)
    {
    string logFile = string.Format(@"{0}\Cloud\Cloud.Log", Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
    log4net.GlobalContext.Properties["LogFileName"] = logFile;
    log4net.Config.XmlConfigurator.Configure();
    ILog log = log4net.LogManager.GetLogger(typeof(Program));
    log.Info("Console Applicatin Start");
    }
}

我应该如何为完整的解决方案配置 Log4Net?

我认为这与问题无关,但这是我的 App.config:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="%property{LogFileName}.txt"  />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="250KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>

最佳答案

log4net 的一个重要特性是能够根据记录器名称配置不同的过滤和处理:任何将记录器包装在包装器、单例或静态对象中的解决方案都会丢失它,因为所有日志都将使用相同的记录器名称- 以及立即查看日志条目来自哪个类别的有用功能。

在要记录的类中,您只需要一个字段,例如:

private static ILog Log =        
             LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

它将记录器名称设置为其包含的类型的名称。

关于c# - 为整个项目配置 Log4Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29228785/

相关文章:

C# - 代码处理顺序 - 奇怪的行为

c# - 在窗口关闭时运行 Windows 窗体线程

c# - 记录正确

logging - 具有复合滚动样式的Log4Net RollingFileAppender将覆盖数据

c# - 将 log4net 包含到使用 .net 4.0 构建的 .net Web 应用程序中

xml - 为 log4net 设置动态连接字符串

c# - DataContract 中字典的自定义序列化

c# - 通过代码在由多列组成的主键上定义 NHibernate 映射

c# - 空对象不能转换为值类型

c# - log4net:未调用自定义 PatternLayoutConverter