如何在代码中使用log4net配置NHibernate日志记录,而不是在xml文件中?

依靠这个文档http://nhibernate.info/doc/howto/various/configure-log4net-for-use-with-nhibernate.html ,使用XML配置文件通过log4net配置NHibernate日志非常容易。

但我需要在C#代码中做同样的事情。

这个答案基于如何从头开始以编程方式配置log4net(无配置) 。 但是,由于该答案仅为根记录器提供了解决方案,因此我对其进行了一些扩展。

///  /// Test for Log4Net ///  public static void TestLog4Net() { // Configures log4net ConfigureLog4net(); ILog log = LogManager.GetLogger("foo"); log.Debug("This should not appear in a logfile!"); ILog log2 = LogManager.GetLogger("NHibernate.SQL"); log2.Debug("This should only appear in the NH logfile!"); ILog log3 = LogManager.GetLogger("MyProgram"); log3.Debug("This should appear in the main program logfile!"); } ///  /// Configures log4net ///  public static void ConfigureLog4net() { Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); // Remove any other appenders hierarchy.Root.RemoveAllAppenders(); // define some basic settings for the root Logger rootLogger = hierarchy.Root; rootLogger.Level = Level.Debug; // declare a RollingFileAppender with 5MB per file and max. 10 files RollingFileAppender appenderNH = new RollingFileAppender(); appenderNH.Name = "RollingLogFileAppenderNHibernate"; appenderNH.AppendToFile = true; appenderNH.MaximumFileSize = "5MB"; appenderNH.MaxSizeRollBackups = 10; appenderNH.RollingStyle = RollingFileAppender.RollingMode.Size; appenderNH.StaticLogFileName = true; appenderNH.LockingModel = new FileAppender.MinimalLock(); appenderNH.File = "log-nhibernate.log"; appenderNH.Layout = new PatternLayout("%date - %message%newline"); // this activates the FileAppender (without it, nothing would be written) appenderNH.ActivateOptions(); // This is required, so that we can access the Logger by using // LogManager.GetLogger("NHibernate.SQL") and it can used by NHibernate Logger loggerNH = hierarchy.GetLogger("NHibernate.SQL") as Logger; loggerNH.Level = Level.Debug; loggerNH.AddAppender(appenderNH); // declare RollingFileAppender with 5MB per file and max. 10 files RollingFileAppender appenderMain = new RollingFileAppender(); appenderMain.Name = "RollingLogFileAppenderMyProgram"; appenderMain.AppendToFile = true; appenderMain.MaximumFileSize = "5MB"; appenderMain.MaxSizeRollBackups = 10; appenderMain.RollingStyle = RollingFileAppender.RollingMode.Size; appenderMain.StaticLogFileName = true; appenderMain.LockingModel = new FileAppender.MinimalLock(); appenderMain.File = "log-MyProgram.log"; appenderMain.Layout = new PatternLayout( "%date [%thread] %-5level %logger [%ndc] - %message%newline"); // this activates the FileAppender (without it, nothing would be written) appenderMain.ActivateOptions(); // This is required, so that we can access the Logger by using // LogManager.GetLogger("MyProgram") Logger logger = hierarchy.GetLogger("MyProgram") as Logger; logger.Level = Level.Debug; logger.AddAppender(appenderMain); // this is required to tell log4net that we're done // with the configuration, so the logging can start hierarchy.Configured = true; } 

您可以在此处和此处找到有关以编程方式配置log4net的信息。 您将需要直接引用项目中的log4net程序集,然后编写必要的代码,以便在应用程序启动时执行(尽可能早)。

但问题是你为什么要这样做……