使用ORM(log4net和OpenAccess)进行日志记录

时间:2013-03-09 13:14:53

标签: c# logging orm log4net openaccess

根据以往的经验和研究,我使用log4Net在工作场所实施了日志记录。

但是,在我们的开发会议中提供log4net时,通常会优先使用自定义记录器。原因是为了使用Telerik的ORM生成的代码而不是在配置文件中指定插入查询。

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
   <bufferSize value="1"/>
   <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
   <connectionStringName value="Test"/>
   <commandText value="INSERT INTO Log (UniqueId,Date,UserId,Thread,level,Logger,Message,Exception)     VALUES (UUID(),?log_date,?userid,?thread,?log_level,?logger,?message,?exception)" />
   ...

你有什么建议?我们可以为此目的创建自定义appender吗?我们应该选择自定义记录器吗?

有关信息,自定义记录器here有正面和负面的观点。

由于

1 个答案:

答案 0 :(得分:0)

您可以创建自定义记录器,它可以使用您喜欢的任何机制来记录内容。就个人而言,我发现AdoNetAppender非常高效。

但是,在支持企业运营的情况下,我强烈建议您使用最低阻抗技术来记录您的消息。通过调试生产系统,日志就会出现。为了'数据库访问模式一致性',我会避免编写一个appender。

如果您遇到数据库,ORM,操作系统或网络问题,您需要的最后一件事就是让您的记录器无法正常工作。文件,Windows调试信息和ETW日志记录是我在第一个实例中推荐的,这可以使用数据库日志记录进行备份并使其更安全我将数据库日志记录放入至少一个不同的数据库中 - 这样就不会影响您的生产系统。最好是在本地服务器上,网络连接不会发挥作用。

修改

如果您真的想要,可以从AdoNetAppender派生一个类,然后覆盖CommandText属性以进行自定义。这里有一个例子,我似乎无法放置,用连接字符串做这个。