【问题标题】:Where to put logs?在哪里放置日志?
【发布时间】:2021-08-31 03:29:24
【问题描述】:

我有一个 winform 应用程序,有时需要在与服务的连接中断时将信息记录到本地文件。重新连接后,所有日志文件将被发送到用于登录数据库的服务。由于日志存储在应用程序文件夹的根目录中,因此计算机的其他用户帐户可以读取它。因此,如果发生异常的用户 A 没有连接到服务,则用户 A 的日志文件内容将在用户 B 连接到服务时发送。

问题是有些用户没有给根文件夹写权限。

可以使用特殊的用户文件夹,但问题是用户 B 将无法将用户 A 日志文件发送到服务。

是否有任何共享的 Windows 文件夹可供我随时写入?还是我必须要求应用程序根目录的写入权限?

问候

【问题讨论】:

  • 可能是System.IO.Path.GetTempPath()?
  • @Klamsi 如果您希望保留数据以便检查日志,那么在临时路径中写入是有风险的。 Windows 集成的磁盘可用空间工具可以从 TempPath 中删除文件。
  • 据我所知,本地日志只是临时的“当与服务的连接中断时”,直到“重新连接后所有日志文件将被发送到服务以登录数据库。”。但是,是的,你是对的,不能保证他们还在这里。
  • 标准是:用户临时路径如果是临时的,用于流程执行会话或%USER%\AppData\Roaming\Company\Application\Log%USER%\Documents\Roaming\Company\Application\Log%PROGRAMDATA%\Company\Application\Log要共享。见Work with user paths

标签: c# file io permissions


【解决方案1】:

如果您想为启动应用程序的每个用户编写日志,我会将它们写入 AppData,但如果您想存储对您的应用程序全局的日志,我会将日志写入 ProgramData。

在 C# 中,您可以使用 Environment.GetFolderPath 获取这些特殊文件夹,并将所需的 Environment.SpecialFolder 作为参数传递。

【讨论】:

  • 好的,那么在这个花瓶中 Environment.SpecialFolder.CommonApplicationData 会是一个不错的选择吗?
  • 可能 A. Boz 建议使用 SpecialFolder.ApplicationData(在资源管理器中键入 %AppData% 时获得的文件夹)。 CommonApplicationData 我相信是用于不同应用程序之间共享的数据。
  • 据我所知,ApplicationData 是每个用户的,而 CommonApplicationData 是相同的,但跨用户。所以就我而言,听起来我应该使用 CommonApplicationData。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多