【问题标题】:Logging using ORM (log4net and OpenAccess)使用 ORM(log4net 和 OpenAccess)进行日志记录
【发布时间】:2013-02-25 00:09:12
【问题描述】:

根据之前的经验和研究,我在工作场所使用 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)" />
   ...

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

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

谢谢

【问题讨论】:

    标签: c# logging orm log4net openaccess


    【解决方案1】:

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

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

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

    编辑

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

    【讨论】:

    • 当你说“任何机制”时,我可以使用 AdoNetAppender 而不在配置文件中指定插入查询吗?我想要 Log4Net 的功能/性能并满足团队要求。谢谢你的建议。我会做一些研究并考虑使用不同的数据库。
    • 是的,我已经看到了可以覆盖连接字符串的示例。在 log4net 具有“connectionStringName”属性之前使用它。我曾考虑对命令文本使用相同的方法,但它仍然不会使用团队需要的生成的数据传输对象。自定义记录器似乎是目前唯一的解决方案。
    猜你喜欢
    • 2020-05-21
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多