【问题标题】:Where to store an application log file on Windows在 Windows 上存储应用程序日志文件的位置
【发布时间】:2019-03-04 07:30:29
【问题描述】:

将应用程序的调试日志文件放在 Windows 用户环境中的最佳“标准”位置是什么?

在这种特殊情况下,它是一个运行一次并且可能出错的应用程序。它将由可能需要在应用程序运行后检查日志的系统管理员类型运行。每次运行应用程序时,都会创建一个新的日志文件。

目前浮动的选项包括:

  1. 程序目录
  2. 用户的桌面
  3. 用户的本地应用程序数据目录。

我有我最喜欢的,但我想知道 SO 共识是什么。

注意:这类似于this question,但我们正在处理的应用程序只能由一个用户运行一次。

【问题讨论】:

  • 日志文件的用途是什么?这可以推动答案。谁会看呢?在大多数情况下会被查看吗?有问题才看?
  • 该工具是一个数据库升级工具,它对你的数据库做了很多事情。日志显示它所做的一切,包括错误。大多数用户可能只在出现错误时才查看它,但我们预计很多 DBA 会想知道到底做了什么。所以他们会想去找日志并查看它。

标签: windows logging


【解决方案1】:

Application Data 目录似乎是一个完美的地方,但它是一个几乎不可见的区域。您需要为您的用户提供一种轻松访问它的方法。

让您的安装脚本在应用程序数据区域为您的程序创建一个日志文件夹,并在开始菜单中包含指向该文件夹的链接。

【讨论】:

  • AppData 文件夹是最好的位置,但它确实需要来自程序或开始菜单的链接才能轻松访问,即使对于管理员类型的人也是如此。为什么不在运行结束时弹出日志文件,或者打开 AppData 文件夹的资源管理器窗口? ProgramFiles 文件夹是错误的,Vista 以后将其视为只读,除非您是安装程序。用户文档和桌面是不好的选择,对于用户创建(键入、下载)的文档而不是日志,它们应该保持清晰。
  • 您能详细说明一下这个答案吗?我将在 Application Data 中创建的日志文件夹命名为什么?我的应用程序的名称?组织名称?什么是 Windows 约定?
  • @Thunderforge 这显然很随意。在我的 Windows 7 系统上,我看到 Microsoft 正在使用 AppData\*\Microsoft\(app name),可能还有子目录。
  • 很好,所以它遵循大多数其他平台使用的organization\app 约定。 * 是什么意思?
  • @Thunderforge 在AppData 下有 3 个子目录:LocalLocalLowRoaming。 Microsoft 在所有 3 项下都有条目,尽管我自己只使用过 Local
【解决方案2】:

在我工作的组织中,我们使用 (%TEMP% 或 %TMP%)\CompanyOrProductName\Logs 目录 如果日志很多或很大,使用 %APPDATA% 可能会给漫游配置文件带来问题:它会减慢他们的登录过程......

【讨论】:

  • 好点。在 AppData 中转储内容时要记住的事项。
  • 考虑 %LOCALAPPDATA% - 非漫游等效项。
  • 我不会将日志文件存储在 TEMP 文件夹中。 TEMP 中的文件是临时的,可以随时删除。日志的目的是留在那里,直到发生不好的事情或您需要查阅它。您不希望您的日志被系统随机删除并在您需要它的那一天消失。如果日志太大,您要么需要将应用程序设置为使用循环日志,要么在一段时间后删除旧文件。
【解决方案3】:

1.程序目录

2.用户的桌面

3.用户的本地应用程序数据目录。

我的偏好是程序目录下的子目录(使用清晰的名称,如“DebugLog”或类似名称)。该子目录的权限应该允许创建和写入文件(“更改”就可以了)

【讨论】:

  • 使用程序目录下的任何东西都是一个坏主意,因为它在使用该机器的任何用户之间共享。然后您会授予任何人对此 DebugLog 目录的读/写权限吗?然后你有安全问题,不同的用户覆盖彼此的日志文件等等......你的#3是正确的答案恕我直言。
  • 你说的很对。在这种特殊情况下(调试日志记录),我认为子目录是可以接受的。 (这不是使用该软件的标准方式,而是一个例外)。因此,允许将调试日志存储在 Debug 子目录中是可以的。应使用唯一名称创建调试日志以防止被覆盖。
  • 用户在运行安装程序时如何在 Program Files 中创建什么文件夹。
【解决方案4】:

日志的“标准”位置是 AppData 目录。但是,实际上取决于您要将它们存储在哪里。由于他们是管理员(高级用户),因此将日志存储在与正在运行的应用程序相同的目录中应该没有问题。即使在 MyDocuments 中的用户也会很好的呼喊。

【讨论】:

  • 好点,但我不鼓励将内容记录到“我的文档”或“桌面”中 - 这些是用户的位置,我认为应用程序不应向它们写入任何内容,除非用户指示这样做。
  • 应用程序(默认情况下)将项目保存在 MyDocuments 文件夹中的情况并不少见,例如模板。 Visual Studio 和 Delphi 一样。
  • 当事情将内容保存到我的文档时,我个人会感到恼火,但这就是我。反对 AppData 的论据之一是它不容易被用户“发现”,因此我的文档可能会更好......
  • 在编写 Web 应用程序时不要使用应用程序文件夹。例如对于 IIS,这将导致应用程序池回收和会话丢失!
【解决方案5】:

如果您预计会出现问题,请将其放在用户的本地应用程序数据目录中。

如果您不这样做并且只想登录,我可能会考虑真正使用临时目录。原因很简单。如果应用程序只运行一次,您会将垃圾留在应用程序数据目录中,否则将不再需要任何人。在临时工中,您至少有机会稍后将其清理干净。

顺便说一句:恕我直言,最好不要将日志创建为文件(记录到内存),直到出现问题。然后您仍然可以提供一个对话框,用户可以在其中选择保存日志的位置。

【讨论】:

    【解决方案6】:

    Windows 临时文件夹

    【讨论】:

    • 为什么?谁会在那里寻找日志文件。这不是临时文件,IMO。
    • 他告诉“一个用户只可能运行一次的应用程序”,我认为这是一个临时日志和临时应用程序。
    【解决方案7】:

    假设您希望将日志文件保留相当长的时间并且它们打算被使用,请阅读我会将日志文件放在用户本地应用程序数据文件夹的子文件夹中,可以通过键入从 Windows 资源管理器访问%localappdata%

    如果它们是临时日志文件,仅在系统诊断时使用,那么您应该将它们放在临时文件夹中,可从 Windows 资源管理器%temp% 访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 2023-03-30
      • 2015-01-03
      • 2011-11-23
      • 2016-06-09
      • 2015-03-20
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多