哪个目录最适合保存日志?

Which directory is the best for saving logs?

我是 MacOS 新手。制作 .app 应用程序后,我将要添加日志记录功能,但想知道我应该使用哪个目录。我发现以下是保存日志文件的常见方式,但它们有何不同,哪一个是最好的?

简短回答:这取决于您的软件是什么以及它记录的是什么。对于创建自己日志的 .app,~/Library/Logs 几乎肯定是最好的地方。但是,如果您正在记录有关您的应用程序的 debugging/tracing 信息,请改用 Apple's unified logging system

长答案:第一个相关区别是记录的事件是与作为开发者的相关,还是与应用程序的实际用户运行相关。如果适合您,请使用 Apple 的统一日志记录。

下一个相关的区别是日志是与整个系统相关,还是仅与个别用户运行软件相关。您可能将 macOS 用作单用户操作系统,但它经过组织以便多个用户可以共享同一台计算机。所以问问自己:这个日志应该对计算机上的所有用户(或者可能只是管理员)可见,还是只对实际使用该软件的用户可见?如果每个用户应该只看到他们自己的日志历史记录,那么它显然属于用户的主文件夹,所以 ~/Library/Logs 是正确的地方。

一个相关的问题是普通用户没有权限写入 /Library/Logs 和 /var/log(又名 /private/var/log),因此应用程序 运行作为普通用户不能登录到那些地方。

最后一个区别是您的软件是 Mac-ish 还是 Unix-ish。 macOS 有两层,Unix 层和建立在它之上的 Mac-specific 层。 /Library/Logs 是非用户特定日志的 Mac-ish 位置,而 /var/log 是类似的 Unix-ish 位置。这么说吧:如果您的程序安装到 /Applications,那么您就是 Mac-ish 世界的一部分,并且会使用 /Library/Logs 作为系统范围的日志。另一方面,如果你的程序安装到 /usr/local 或 /opt,你就是 Unix-ish 世界的一部分,应该使用 /var/log.

所以,总结一下:

  • 面向开发人员的调试和跟踪信息的统一日志系统
  • ~/Library/Logs来自非系统软件的面向用户的信息
  • /Library/Logs 用于 Mac-ish 系统范围的事件日志记录
  • /var/log 用于 Unix-ish 系统范围的事件记录

顺便说一句,统一的日志信息实际上存储在/var/log中。但是不要那样访问它——使用 API.