如何使用log4net在代码中配置NHibernate日志记录,而不是在xml文件中? [英] How to configure NHibernate logging with log4net in code, not in xml file?

查看:431
本文介绍了如何使用log4net在代码中配置NHibernate日志记录,而不是在xml文件中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

$ b $

解决方案

但是我需要在C#代码中做同样的事情。 a href =http://stackoverflow.com/a/1776025/634872>如何以编程方式从头开始配置log4net(无配置)。但是,由于该答案只为根记录器提供了一个解决方案,我稍微扩展了一下。

  ///< summary> ; 
///测试Log4Net
///< / summary>
public static void TestLog4Net()
{
//配置log4net
ConfigureLog4net();
ILog log = LogManager.GetLogger(foo);
log.Debug(这不应该出现在日志文件!

ILog log2 = LogManager.GetLogger(NHibernate.SQL);
log2.Debug(这应该只出现在NH日志文件!

ILog log3 = LogManager.GetLogger(MyProgram);
log3.Debug(这应该出现在主程序日志文件!
}

///< summary>
///配置log4net
///< / summary>
public static void ConfigureLog4net()
{
层次结构=(层次)LogManager.GetRepository();
//删除任何其他附加器
hierarchy.Root.RemoveAllAppenders();
//定义根的一些基本设置
Logger rootLogger = hierarchy.Root;
rootLogger.Level = Level.Debug;

//声明一个RollingFileAppender,每个文件5MB,最大。 10个文件
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);
//这会激活FileAppender(没有它,不会写入任何内容)
appenderNH.ActivateOptions();

//这是必需的,所以我们可以通过使用
// LogManager.GetLogger(NHibernate.SQL)访问Logger,它可以被NHibernate使用
Logger loggerNH = hierarchy.GetLogger(NHibernate.SQL)as Logger;
loggerNH.Level = Level.Debug;
loggerNH.AddAppender(appenderNH);

//声明RollingFileAppender,每个文件5MB,最大。 10个文件
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]%-5级别%logger [%ndc] - %message%newline
//这会激活FileAppender(没有它,什么都不会写)
appenderMain.ActivateOptions();

//这是必需的,所以我们可以通过使用
// LogManager.GetLogger(MyProgram)来访问Logger
Logger logger = hierarchy.GetLogger(MyProgram )as Logger;
logger.Level = Level.Debug;
logger.AddAppender(appenderMain);

//这是必需的告诉log4net我们完成了
//与配置,所以日志可以启动
hierarchy.Configured = true;
}


Relying on this doc http://nhibernate.info/doc/howto/various/configure-log4net-for-use-with-nhibernate.html it is quite easy to configure NHibernate logging through log4net by using XML config files.

But i need to do the same in C# code.

解决方案

This answer is based on How to configure log4net programmatically from scratch (no config). However, since that answer only provides a solution for the root logger, I expanded that a little.

/// <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;
}

这篇关于如何使用log4net在代码中配置NHibernate日志记录,而不是在xml文件中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆