NHibernate +流利的映射+ NLog =在程序集中找不到映射的文档

时间:2019-02-01 11:39:12

标签: nhibernate nlog fluent-nhibernate-mapping

对于以前使用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);

我在做什么错了?

2 个答案:

答案 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;

您可以参加FileAppenderLogger课程,以满足您的其他要求。 This Q / A可能也有帮助。

我不明白为什么需要将映射程序集输入到记录器。正如您在上面看到的,log4net配置不需要它。希望这样可以解决您的问题。

答案 1 :(得分:0)

好吧,我对此感到很尴尬,我很想完全删除这个问题,但是我决定发布解决方案,以防万一其他空头碰到了同样的障碍:我忘记了删除{{1 }}来自NLog配置的指令,而我仅记录警告,错误和致命错误–该警告使我认为由于警告而未记录日志,而实际上由于我已禁止较低级别的记录而未记录日志消息。