所以我们已经讨论了在我工作地点的记录,我想知道你们中的一些人是否可以给我一些关于你的方法的想法?
通常我们的方案是,根本没有日志记录,主要是.NET应用程序,winforms / WPF客户端通过Web服务进行通信或直接到数据库。
所以,真正的问题是,你会在哪里登录?目前我们有用户报告错误消息 - 所以我会假设日志启动/关闭,例外......
您是否将其用于调用Web服务或数据库?页面加载?
您如何很好地了解用户当时尝试做什么?
最好是一路走好并在多次尝试/天内记录所有内容,或者只记录您需要的内容(给定hdd便宜)。
我想这是几个问题,但我想更多地了解大型商店的实际操作是什么!
答案 0 :(得分:10)
记录的关键是良好的规划。我建议您查看企业库异常和日志应用程序块(http://msdn.microsoft.com/en-us/library/cc467894.aspx)。有一点学习曲线,但它确实很有效。我目前支持的方法是定义4个优先级。 4 =未处理的异常(事件日志中的错误),3 =处理的异常(事件日志中的警告),2 =访问外部资源,例如webservice,db或大型机系统(事件日志中的信息),1 =详细/其他感兴趣的(事件日志中的信息)。
使用应用程序块,可以很容易地调整您想要记录的优先级。所以在开发过程中你会记录所有内容,但是当你在生产中获得一个稳定的系统时,你可能只对未处理的异常和可能处理的异常感兴趣。
更新:为清楚起见,我建议你登录winform / wpf应用程序和web服务。在Web场景中,我在过去遇到过一些问题,很难将客户端上的错误与应用服务器联系起来。主要是因为通过webservices的任何错误都被包装为SOAP异常。我不记得我的头脑,但我认为如果您使用自定义异常处理程序(它是企业库的一部分),您可以将数据添加到异常,例如来自应用服务器的异常的handlinginstance id。通过使用LogParser(http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en),可以更轻松地将客户端上的异常绑定到应用程序框。
第二次更新:我还想为每个不同的事件分配一个单独的事件ID,并在源代码管理下的文本文件或电子表格中跟踪它。是的,这很痛苦但是如果你有幸让一个IT团队在生产中管理你的系统,我发现他们倾向于期望不同的事件有不同的事件ID。
答案 1 :(得分:7)
作为管理员,我非常感谢能够记录所有日志记录但跟踪日志的事件日志(最好是他们自己的,否则是应用程序日志)的应用程序。通过记录到事件日志,您更有可能在管理人员成为主要问题之前找到并解决警告或错误(如果这是他们可以解决的问题),或者允许他们联系与开发人员一起,他们可以使用跟踪日志来进一步解决问题。
我现在支持自定义.NET应用程序的最大痛点是来自同一供应商的8个不同的应用程序(一些控制台应用程序,一些winforms和一些Web)。他们都没有登录到事件日志,他们都有自己的自定义日志文件。但对于所有winforms和控制台应用程序,它们在文件运行时保持打开状态,因此我无法监视它是否存在问题。此外,日志的编写方式略有不同,因此我必须稍微解析它们才能获得有用的信息。
这迫使我监视应用程序的外观(它是在它处于活动状态的端口上响应,进程工作集是否过高等等),而不是应用程序的状态。
请考虑部署后维护应用程序的人员并提供他们可以使用的日志记录。谢谢!
答案 2 :(得分:3)
This post on highscalability.com为大规模分布式系统的登录提供了良好的视角。 (巧合的是,它首先提到JoelOnSoftware上的帖子。)
答案 3 :(得分:2)
最好是一路走好并在多次尝试/天内记录所有内容,或者只记录您需要的内容(给定hdd便宜)。
事实硬盘很便宜真的不是一个很好的理由来详细记录所有可能的东西,原因有几个。比如,一个非常繁忙的应用程序,你真的不想放慢它并占用光盘-writes写日志(硬盘很慢)。第二点,也是更重要的一点 - 从TB级的日志中获得的收益真的很少..对于开发,它们可能很有用,但是你不需要保留超过几分钟的时间......
某些日志记录当然很有用,不同级别是关于它的唯一方法 - 例如,debug()info()仅在请求时(在配置或命令行标志中)被记录,然后可能警告()和error()被发送到日志文件
对于我编写的大多数事情(小脚本)我通常只有一个debug()函数,它检查是否设置了--verbose,并打印消息..这样我就可以推送调试(“值:%s“%(avar))在需要时,不必担心返回并在任何地方删除调试print()语句。
对于Web应用程序,我通常只使用Web服务器日志进行统计,并使用错误日志。我在需要时使用mod_rewrite的日志之类的东西,但是在开发之后启用它会是愚蠢的(因为它在每个页面请求上创建了许多行)
我认为这取决于应用程序本身,但通常,对于大型应用程序,使用可在需要时激活的多级日志。对于较小的东西,一个--verbose标志或等价物,用于Web应用程序,记录错误和(到某一点)日志命中。
基本上,在“生产”日志中只记录您可以使用的信息,在开发日志中,您可能需要修复问题。
答案 4 :(得分:1)
作为一个快速回答,我想说出一系列类别并具有可切换的日志记录级别,例如:信息,警告,错误,关键等。
然后,可以轻松设置日志记录级别以调整所需的详细级别。通常,在配置文件中设置日志记录级别并停止并重新启动应用程序。
我还会向开发者宣传每个级别的含义。
编辑:我还会设置一个系统来定期轮换,压缩和存档日志文件,也许是每晚。
答案 5 :(得分:1)
对于典型的桌面应用,我会将所有内容存储在当前会话中,并且可能存储过去n个会话的信息消息或最多x个大小。
我假设你的消息是有条理的。我们使用4个类别;错误,警告,信息和跟踪。我们还在弄清楚哪个级别的内容。由于我习惯于解析日志文件,我通常会说“更多日志”。不要忘记可读性,在使用它之前,您可能需要稍微处理一下日志文件。
最后,找到一个好的日志框架,它允许您控制生命周期和存储空间上的假脱机使用情况,以及一个最小化对代码影响的api。理想情况下,您只需键入info("waaah")
或warning("waah")
,API就可以为您完成所有花哨的标记。
答案 6 :(得分:0)
谢谢大家,很多好消息,但马丁给了我更多关于如何继续的细节。我会给他答案,因为现在好像我们已经离开了前几页,答案会下降。