如何使用 Nhibernate-logging 在 NHibernate 3 中仅记录 SQL

本文关键字:记录 SQL NHibernate 何使用 Nhibernate-logging | 更新日期: 2023-09-27 18:37:25

我正在使用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...
}

如何使用 Nhibernate-logging 在 NHibernate 3 中仅记录 SQL

"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"/>