Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ORM(log4net和OpenAccess)记录日志_C#_Logging_Orm_Log4net_Openaccess - Fatal编程技术网

C# 使用ORM(log4net和OpenAccess)记录日志

C# 使用ORM(log4net和OpenAccess)记录日志,c#,logging,orm,log4net,openaccess,C#,Logging,Orm,Log4net,Openaccess,基于以前的经验和研究,我使用log4Net在工作场所实现了日志记录 然而,当log4net在我们的开发会议上出现时,人们普遍倾向于使用定制的记录器。原因是为了使用Telerik的ORM生成的代码,而不是在配置文件中指定insert查询 <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="1"/> <connectionType

基于以前的经验和研究,我使用log4Net在工作场所实现了日志记录

然而,当log4net在我们的开发会议上出现时,人们普遍倾向于使用定制的记录器。原因是为了使用Telerik的ORM生成的代码,而不是在配置文件中指定insert查询

<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)" />
   ...
你有什么建议?我们可以为此目的创建自定义附加器吗?我们应该选择自定义记录器吗

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


谢谢

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

然而,在支持企业运营之后,我强烈建议您使用最低阻抗技术来记录消息。日志在调试生产系统时会自动生成。为了“db访问模式一致性”,我会避免编写appender

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

编辑:


如果确实需要,可以从AdoNetAppender派生一个类,然后将CommandText属性重写为custom。这里有一个我似乎无法放置的示例,它是通过connectionstring实现的。

当您说“任何机制”时,我可以使用AdoNetAppender而不在配置文件中指定insert查询吗?我希望了解Log4Net的功能/性能,并满足团队要求。谢谢你的建议。我会做一些研究并考虑一个不同的数据库。是的,我已经看到了可以重写连接字符串的例子。它是在log4net具有connectionStringName属性之前使用的。我曾考虑对commandtext使用相同的方法,但它仍然不会使用团队所需的数据传输对象。定制的记录器似乎是目前唯一的解决方案。