【问题标题】:How to log only SQL in NHibernate 3 using Nhibernate-logging?如何使用 Nhibernate-logging 在 NHibernate 3 中仅记录 SQL?
【发布时间】:2015-01-13 15:09:54
【问题描述】:

我正在使用 Nhibernate-logging appsettings 选项来使用我的自定义记录器,实现 IInternalLogger 和 ILoggerFactory,但我只想记录 SQL 语句。

public class CustomLogger: IInternalLogger, ILoggerFactory
{
    private TraceSource traceSource;

    public CustomLogger()
    {
        this.traceSource = new TraceSource("CustomLogger");
    }

    public IInternalLogger LoggerFor(Type type)
    {
        return new CustomLogger();
    }

    public IInternalLogger LoggerFor(string keyName)
    {
        return new CustomLogger();
    }

    public void Info(object message)
    {
        this.Log(TraceEventType.Information, message.ToString());
    }

    // etc...
}

【问题讨论】:

    标签: c# nhibernate logging nhibernate-3


    【解决方案1】:

    “key”是LoggerFor(string keyName)方法中的参数keyName:

    public class LoggerFactory : ILoggerFactory
    {
        public LoggerFactory()
        {
        }
    
        public IInternalLogger LoggerFor(Type type)
        {
            return new AllCustomLogger();
        }
    
        public IInternalLogger LoggerFor(string keyName)
        {
            if (keyName == "NHibernate.SQL")
            {
                return new OnlySqlCustomLogger();
            }
            else
            {
                return new AllCustomLogger();
            }
        }
    }
    
    
    public class OnlySqlCustomLogger: IInternalLogger
    {
        public OnlySqlCustomLogger()
        {
        }
    
        public void Info(object message)
        {
            this.Log(message.ToString());
        }
    
    // etc...
    }
    

    并且在web.config/app.config中:

    <add key="nhibernate-logger" value="myNamespace.LoggerFactory, myAssemblyName"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多