我在我的项目中使用log4net以及NHibernate。每条记录的信息都存储为MyLog
对象的实例,该对象已经是NHibernate实体及其映射,表等。我还需要从数据库加载日志并将其显示给用户,即为什么NHibernate方法似乎非常方便。
使用此处所述的AdoNetAppender
设置登录数据库并不困难:
How to use Log4Net utility for logging into database using c#
但是,我想知道为什么我必须在我的配置文件中明确配置所有列属性映射:
<commandText value="INSERT INTO log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
...
虽然我已经在我的流畅API映射中完成了它!
public LogRecordMap () {
Table("log");
Id(x => x.ID)
.Column("id")
.GeneratedBy.Native();
Map(x => x.ObjectID)
.Column("objectid")
.Not.Nullable()
...
我发现它重复,因为我必须保持流畅的映射和AdoNetAppender
配置。是否有“NHibernateAppender
”我可以提供我的映射类而不是直接SQL命令及其所有参数,因为我必须提供AdoNetAppender
?
答案 0 :(得分:1)
我建议您将日志记录和应用程序分开。日志记录不应以映射的形式依赖于您的应用程序。如果您在应用程序中破坏某些内容,则日志记录应继续有效有两个映射到您的日志表看起来加倍。但他们多久会改变一次?如果您只想使用nhibernate访问数据库,则可以编写自定义appender来执行此操作。