微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在哪里写日志的Windows应用程序

我有一个通过ClickOnce部署到Web服务器的.NET Windows应用程序。 在任何时候都有大约100个用户,都位于中心位置。 我正在使用log4netlogin应用程序,但我很难到达放置日志的最佳位置。

我试过让他们写入共享的networking位置,但是一些用户使用这种方法遇到了糟糕的I / O。 我已经尝试login到用户的临时文件夹,但这使得难以检索日志。 我没有尝试过事件日志,因为我可能不得不跳过一些环节才能得到这个工作,而且我不确定这是否值得。 我从来没有尝试数据库日志logging,但我一直认为它会相对缓慢。

有没有人有login在公司环境中部署的Windows应用程序的经验? (1)快速,(2)可靠,(3)可以访问的任何build议,我可以把日志放在哪里?

如何在Windows上编码C#但在Linux上运行?

如何从设备pipe理器获取信息?

Windows服务打印PDF文件

如何禁用.NET Frameworkexception处理并使用我自己的呢?

如何查看是否对文件文件夹select“包含可inheritance的权限”?

等待进程完成,然后显示消息(C#)

在Linux中运行Windows程序

以编程方式更改Internet Explorer设置?

如何创build一个键在registry(Visual C#)?

禁用交换(分页文件)以确保一切都在内存中

数据库日志记录的问题不是速度:这是可靠性。 当事情出错时,你记录下来,如果事情已经出错,一个无法访问的数据库的可能性不会对你有利。

通常,您要写入本地文本文件和其他地方,如网络共享或数据库。 如果您遇到IO /速度问题,则可以使用文本文件作为缓冲区,并批量将日志写入竞争资源。 然后定期刷新本地“备份”日志。

我用ms sql数据库使用log4net。 如果可能的话,我通常会把它们放在一个不同的服务器上。 这样,如果应用程序服务器或数据库有问题,我不会失去我的日志记录。

速度从来都不是问题。

log4net支持一些主要数据库数据库appender 。 如果你有合适的数据库,这可能是一个更好的选择。 但请小心,因为如果管理不当,可能会降低应用程序的可靠性。

您可以将它与本地文件记录结合使用,通过使用BufferingForwardingAppender对网络日志记录进行批处理,并且只在您收到超过某个阈值的消息时才发送。 这样,您可以有足够的上下文来跟踪错误,但只有在发生错误时才会发生。

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> <bufferSize value="1024" /> <lossy value="true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="ERROR"/> </evaluator> <appender-ref ref="DatabaseAppender" />

怎么样的ApplicationData文件夹? 在Vista上会是这样的:

C:用户雷应用程序数据本地 MyCompanyName

如果你想要一个中央位置,我会去数据库日志记录。 但是正如Joel所说的那样,你会想要一个总是有效的本地位置(或者接近它的位置)和一个集中的位置来收集日志,以便正常运行。

您可以使用本地日志记录的组合,并且可以在成功注销时将日志同步到中央数据库

这取决于你想要做什么样的日志记录以及你的应用程序是如何运行的。 如果执行日志记录的应用程序是客户端应用程序,那么如果您写入事件日志,则可能没有帮助。

如果你确实想要写入事件日志,这是相当直接的:

http://support.microsoft.com/kb/307024

还有一件事,如果你正在寻找一个你知道用户可以访问的位置,你可以使用独立存储,但是你试图写入共享文件夹的事实使得我想要一个中心位置对于你的日志,在这种情况下,数据库可能是你最好的选择,我最好的建议可能是最适合你的。

如果应用程序是典型的双层作业,则使用adonetappender登录数据库可能是适当的。 adonetappender以最多100个块为单位批量处理日志消息,尽管您可能希望将其配置为至少通过WARN严重性事件写入。

您也可能要考虑记录到所有用户应用程序数据目录,尽管这可能使得检索日志同样困难。 也许考虑在某处添加快捷方式?

最后,如果日志可访问性问题是组织中的常见主题,则可能需要考虑日志收集应用程序(如Splunk) 。

您可以尝试在CommonAppData文件夹下的某个地方(如CommonAppData YourAppName Logs),前提是您要确保大小限制和/或定期清理。 人们习惯于定期清理临时文件夹,但是不要在CommonAppData,AppData或LocalAppData周围开始挖掘。

写在任何地方,但在这里或在温度迟早会让你在Vista和更高的麻烦。

如果日志不重要,例如,如果有人删除了日志,那么不可替代的数据不会丢失,我肯定会去Temp中的一个文件夹,并有一个单独的任务调度程序作业上传它们。 这是最痛苦的地方。

在我们的应用程序中,我们使用log4net,并在CommonAppData目录(C: Documents and Settings All Users Application Data Company Product)中为我们所有的用户使用一个通用的日志文件在这种情况下,我们的安装程序必须手动设置目录和日志文件文件权限,以便所有用户都可以访问它,认权限仅适用于安装应用程序的用户

我们还使用顶级异常处理程序(使用类似于http://www.wintellect.com/cs/blogs/jclark/archive/2005/03/的实现)将未处理的异常(如果可以的话)记录到事件日志中30 / simple-main.aspx )。 我们使用事件日志,因为所有的赌注都是关于打开的文件流的状态。 同样,我们的安装程序必须在应用程序事件日志中设置事件日志源。

如果您确实使用事件日志,请确保您的日志记录相当简单。 如果记录了很多事件,事件日志可以很快填满,并且XP上的认策略是事件日志在日志已满时开始删除事件,并且认大小相对较小(512 KB,并且只覆盖超过7天的事件)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐