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
指令,我只记录了警告、错误和致命错误——那个警告让我认为它没有记录是因为警告,而实际上它没有记录因为我禁止了较低级别的消息。
我已经成功地使用 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
指令,我只记录了警告、错误和致命错误——那个警告让我认为它没有记录是因为警告,而实际上它没有记录因为我禁止了较低级别的消息。