2015-01-13 86 views
1

我正在使用Nhibernate-logging appsettings選項來使用我的自定義記錄器,實現IInternalLogger和ILoggerFactory,但我只想記錄SQL語句。如何使用Nhibernate日誌只記錄NHibernate 3中的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... 
} 

回答

1

「密鑰」 是在LoggerFor(串的keyName)方法PARAM的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"/>