如何针对 Mac OS X 应用程序禁用/设置日志记录级别/首选项?

如何针对 Mac OS X 应用程序禁用/设置日志记录级别/首选项?

我发现我的 Mac 的 syslogd“Cosole”日志在运行一些编写糟糕的应用程序时变得不可用(路径查找器在这种情况下)整天不停地向 syslogd 中喷涌而出。我读到过某处说你可以通过以下方式禁用每个应用程序的日志记录。

  1. 创建一个别名到可执行包里面App“包”,然后仅从终端启动该别名。过程是...浏览到/Applications/ObnoxiousLogger.app,右键单击,“显示包内容”,然后浏览到...

    /Applications/ObnoxiousLogger.app/Contents/MacOS/ObnoxiousLogger

    然后,您通过 GUI 创建别名,并记住始终从该别名启动应用程序,同样只能通过终端启动。

    这很烦人,因为你必须通过 Finder 创建别名(符号链接不起作用,并且无法通过终端创建别名)如果以任何其他方式发射,你就又回到原点了,多言多语.. 这种方法确实有效,但持续时间很短。

  2. 似乎你可以通过启动控制命令或 plist 变量,但这不是由 launchd 打开的应用程序,并且 launchd 的文档到处都是,但我想这是一种可能性。

  3. 我看到了一些关于将日志发送到 /dev/null 的内容,但不清楚这是否是某种 syslogd 管道、命令、或 /etc/syslogd.conf 设置,或者什么......

如果你有万无一失的方法,请告诉我选择性地静默每个应用程序的日志记录,或者更好的是,在 Mac OS X 中增加或减少每个进程/命令等的日志详细程度

答案1

您可能想看看asl.conf(5)哪些功能允许您在相当细粒度的级别上忽略/处理日志消息。

就像是:

? [= Sender ObnoxiousLogger] ignore

应该可以解决问题。如果您仍想查看来自令人讨厌的发件人的更严重的消息,请按照以下方式操作:

? [= Sender ObnoxiousLogger] [> Level error] ignore

可能更合适。

笔记:编辑后/etc/asl.conf,不要忘记kill -HUP你的 syslogd。

答案2

只需创建一个文件»新数据库搜索…, 寻找 设施包含“ console发件人不包含“ ObnoxiousLogger,并忽略默认值控制台消息数据库搜索?

在此处输入图片描述


您可以使用以下命令为特定进程设置单独的日志过滤级别:

syslog -c processname -d

这将设置日志级别目前正在运行实例processname所有调试级别或更高级别的消息. 可能的级别是每个字符pacewnid(恐慌)、警报、严重、错误、警告、通知、信息和调试

因此,要仅为 Finder 启用警告消息及更高级别的日志记录,请使用:

syslog -c Finder -w

每当您重新启动相关进程时,您都需要重复此操作。

答案3

我使用的是 MacOS Mojave (10.14.3),这篇文章对我很有用,所以我想澄清一下对我有用的方法,因为我还没有在一个地方看到过所有这些方法。就我而言,我想过滤掉 Microsoft OneNote 消息,这些消息不断以每秒 5 条的速度向我的 system.log 文件发送垃圾邮件。示例消息:

Feb  3 22:52:49 MyMacMini-2 Microsoft OneNote[393]: [ACT]:[TASKSCHEDULER]:[Info]:opQueue=0x6000012d7760 after call to waitUntilAllOperationsAreFinished

因此我使用以下规则编辑了 /etc/asl.conf:

# Disable Microsoft OneNote logging as is filling up system.log!
? [= Sender Microsoft OneNote] ignore

您需要在以下行之前添加此代码:

# Rules for /var/log/system.log

否则它将无法工作。然后只需使用此命令重新启动 syslogd,消息就会从 system.log 中消失:

sudo killall -HUP syslogd

答案4

我发布了更详细的回答在 AskDifferent。

输入/etc/asl.conf如下规则

? [= Sender foobar] [<= Level error] notify com.apple.foobar
  op   key   value   op  key   value
  -----query 1----- -----query 2---- ---------action--------

为了忽略两者中的消息system.log Console.app,你应该添加规则来忽略消息以下评论在asl.conf

# Flat file configurations formerly in syslog.conf

带有修饰符的示例S,它忽略与来自的子字符串匹配的消息SIMBL Agent

? [= Sender SIMBL Agent] [S= Message warning: failed to get scripting definition from] ignore
  op -key-- ---value---  mod --key-- --------------------value-----------------------
  --------query 1------- -----------------------query 2------------------------------- action

添加规则后,使用 重新启动守护进程sudo killall HUP syslogd

在 OS X 10.8.5 中测试成功。

相关内容