Я наконец понял это.
Добавленные правила должны рассматриваться как фильтры, что не соответствует фильтру go следующему правилу.
Последнее похоже на «Возьми все, что раньше не соответствовало ...»
Основная проблема в моих правилах - это первая, которая соответствует только уровням Error и Fatal, но все остальные уровни сообщения Quartz переходят в следующий. Правило, которое записывает файл журнала.
Поэтому правила должны быть такими:
config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfileQ, "Quartz*", true);
config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfile, "*");
Таким образом, все сообщения любых уровней, поступающие из Кварца, будут записываться в файл журнала quartz_.
Чтобы не записывать след или информационный уровень Кварца, я должен добавить третье правило, чтобы захватить их и поместить перед правилом "захватить все":
config.AddRule(LogLevel.Warn, LogLevel.Fatal, logfileQ, "Quartz*", true);
config.AddRule(LogLevel.Trace, LogLevel.Info, noLogging, "Quartz*", true);
config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfile, "*");
Где noLogging - цель, которая никуда не пишет или только в консоль