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

标签 c# nhibernate configuration log4net app-config

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

但我需要在 C# 代码中执行相同的操作。

最佳答案

此答案基于How to configure log4net programmatically from scratch (no config) 。但是,由于该答案仅为根记录器提供了解决方案,因此我对其进行了一些扩展。

/// <summary>
/// Test for Log4Net
/// </summary>
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!");
}

/// <summary>
/// Configures log4net
/// </summary>
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;
}

关于c# - 如何在代码中而不是在 xml 文件中使用 log4net 配置 NHibernate 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903894/

相关文章:

c# - 如何针对分层对象列表动态构建和存储复杂的 linq 查询?

使用 webClient.UploadString 的 C# 单元测试

.net - Nhibernate更新问题-参数索引超出范围

C# - NHibernate 无法将 NHibernate.Collection.Generic.PersistentGenericSet 转换为 System.Collections.Generic.IList

java - 在 Tomcat 中将配置与 WAR 分离的优雅方法

c# - 防止类属性被序列化

c# - 在页面之间保留对象列表 - ASP MVC

c# - 为什么我的系统试图从无效版本的程序集加载类型?

apache - 将运行时参数传递给 tomcat 服务器上的 grails 项目

tensorflow - TensorFlow 对象检测管道配置中 data_augmentation_options 的可能值有哪些?