2013-03-09 72 views
1

根据以前的经验和研究,我使用log4Net在工作场所实现了日志记录。使用ORM记录(log4net和OpenAccess)

但是,当我们的开发会议中提供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有正面和负面的意见。

感谢

回答

0

您可以创建自定义记录器,它可以用你喜欢的东西登录任何机制。就我个人而言,我发现AdoNetAppender完美的性能。

但是,在支持企业运营方面,我强烈建议您使用最低阻抗技术来记录您的消息。日志通过调试生产系统进入自己的行列。为了'db访问模式一致性',我会避免写一个appender。

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

编辑

如果你真的想你可以得到从AdoNetAppender一类,然后覆盖CommandText属性进行定制。在这里有一个例子,我似乎无法放置,这与连接字符串。

+0

当您说'任何机制'时,我可以使用AdoNetAppender而不指定配置文件中的插入查询吗?我希望Log4Net的功能/性能满足团队要求。 感谢您的建议。我会做一些研究并考虑一个不同的数据库。 – Nishzone 2013-03-10 06:32:49

+0

是的,我已经看到了可以覆盖连接字符串的示例。它在log4net具有“connectionStringName”属性之前使用。我曾考虑对命令文本使用相同的方法,但仍不会使用该团队所需的数据传输对象。自定义记录器似乎是目前唯一的解决方案。 – Nishzone 2013-03-10 09:33:29