我的应用程序使用两个数据库。显然,每个数据库都有一个会话工厂;总共两个。
我为NHibernate配置了log4net以发出生成的SQL。但是,这会将两个会话工厂的日志写入单个文件中。我想为每个会话工厂配置不同的日志文件。
以下是我的代码:
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders();
FileAppender fileAppender = new FileAppender();
fileAppender.Name = "NHFileAppender";
fileAppender.File = logFilePath;
fileAppender.AppendToFile = false;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.Layout = new PatternLayout("%d{yyyy-MM-dd HH:mm:ss}:%m%n%n");
fileAppender.ActivateOptions();
Logger logger = hierarchy.GetLogger("NHibernate.SQL") as Logger;
logger.Additivity = false;
logger.Level = Level.Debug;
logger.AddAppender(fileAppender);
hierarchy.Configured = true;
正如您在上面的代码中看到的,没有任何方法可以为每个会话工厂配置不同的日志文件。如果我正确理解这一点,应该有一种方法将会话工厂链接/分配给记录器或记录器到会话工厂。
这可能吗?如果是,怎么样?
答案 0 :(得分:0)
@RomanKoliada为commented,从here复制以下内容:
在Visual Studio输出窗口中记录NHibernate
在ASP.NET MVC 4中工作时,NHibernate'show_sql=true'
不会将生成的查询记录到Visual Studio的输出窗口。 我做了一个简单的实现,用于在Visual Studio的输出窗口中记录NHibernate查询,而不使用第三方记录器。创建一个拦截器类,并覆盖一个方法 查看sourceprint?
public class NHLogger : EmptyInterceptor, IInterceptor { public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) { System.Diagnostics.Debug.WriteLine("NHIBERNATE: " + sql); return base.OnPrepareStatement(sql); } }
然后在Factory的OpenSession中创建它的实例。
SessionFactory.OpenSession(new NHLogger());
这不是我所需要的;但比我已经使用的更好。我仍然愿意接受更好的解决方案。