对于以前使用hbm.xml文件的项目,我已经成功地使用NHibernate中的CommonLogging层通过NLog记录了其内部消息。我现在切换到流利的映射,并且NHibernate日志现在只包含一行:
[Log entry: Warn] 2019-02-01 13:30:42.5537 No mapped documents found in assembly: <assembly name>
配置映射后,我还尝试将nhibernate-logger
配置指令从App.config
文件移到代码中,并且收到与以前相同的警告:
var dbCfg = new Configuration();
dbCfg.Configure();
dbCfg = Fluently.Configure(dbCfg)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<RetailerMapping>())
.ExposeConfiguration(c =>
{
c.SetProperty(@"nhibernate-logger", @"NHibernate.Logging.CommonLogging.CommonLoggingLoggerFactory, NHibernate.Logging.CommonLogging");
})
.BuildConfiguration();
dbCfg.AddAssembly(Assembly.GetExecutingAssembly().GetName().Name);
我在做什么错了?
答案 0 :(得分:1)
如评论中所述,log4net也适合您。
以下是用于在NHibernate上记录 SQL语句的代码:
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders();
FileAppender fileAppender = new FileAppender();
fileAppender.Name = "NHFileAppender";
fileAppender.File = config.LogFilePath;
fileAppender.AppendToFile = true;
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;
您可以参加FileAppender
和Logger
课程,以满足您的其他要求。 This Q / A可能也有帮助。
我不明白为什么需要将映射程序集输入到记录器。正如您在上面看到的,log4net配置不需要它。希望这样可以解决您的问题。
答案 1 :(得分:0)
好吧,我对此感到很尴尬,我很想完全删除这个问题,但是我决定发布解决方案,以防万一其他空头碰到了同样的障碍:我忘记了删除{{1 }}来自NLog配置的指令,而我仅记录警告,错误和致命错误–该警告使我认为由于警告而未记录日志,而实际上由于我已禁止较低级别的记录而未记录日志消息。