1

基于之前的经验和研究,我使用 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)" />
   ...

你有什么建议?我们可以为此目的创建一个自定义附加程序吗?我们应该使用自定义记录器吗?

有关信息,这里对自定义记录器有正面和负面的看法。

谢谢

4

1 回答 1

0

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

但是,在支持企业运营之后,我强烈建议您使用最低阻抗技术来记录您的消息。日志随着调试生产系统而发挥作用。为了“数据库访问模式一致性”,我会避免编写附加程序。

如果您遇到 db、ORM、OS 或网络问题,那么您最不需要的就是让您的记录器无法正常工作。我首先建议使用文件、Windows 调试消息和 ETW 日志记录,这可以使用数据库日志记录进行备份,为了更安全,我会将数据库日志记录至少放入一个不同的数据库中 - 这样就不会影响您的生产系统。最好是在网络连接不起作用的本地服务器上。

编辑

如果您真的想要,您可以从 AdoNetAppender 派生一个类,然后将 CommandText 属性覆盖为自定义。这里有一个我似乎无法放置的示例,它使用连接字符串执行此操作。

于 2013-03-09T13:21:55.917 回答