NHibernate + fluent mapping + NLog = No mapped documents found in assembly

NHibernate + fluent mapping + NLog = No mapped documents found in assembly

我已经成功地使用 NHibernate 中的 CommonLogging 层使用 NLog 为以前使用 hbm.xml 文件的项目记录其内部消息。我现在切换到流畅的映射,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);

我做错了什么?

评论里说了,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 and Logger class to meet your additional requirements. This Q/A 也可能有帮助。

我不明白为什么你需要输入映射程序集到记录器。正如您在上面看到的,log4net 配置不需要它。希望通过这种方式,您的问题应该得到解决。

好吧,我对此感到很尴尬,我很想完全删除这个问题,但我决定 post 解决方案,以防其他空头遇到同样的问题:我忘记了从 NLog 配置中删除 minLevel 指令,我只记录了警告、错误和致命错误——那个警告让我认为它没有记录是因为警告,而实际上它没有记录因为我禁止了较低级别的消息。