У меня плохо написанное PHP-приложение, которое выдает много сообщений E_NOTICE и E_WARNING в журнал ошибок. Я ничего не могу с этим поделать, но трудно отслеживать эти настоящие ошибки, такие как E_ERROR и хуже.
Возникает вопрос: могу ли я иметь несколько файлов журнала ошибок с разными уровнями журнала для одного виртуального хоста в Apache?
Например, один с уведомлением LogLevel и один с ошибкой LogLevel.
Еще один отличный способ сделать это - настроить демон rsyslog для создания этих файлов. В основном вы можете настроить правило для вывода в файл на основе совпадения текста. Откройте /etc/rsyslog.conf и вставьте его туда
если $ programname == 'my-name' и $ msg содержит 'errorstring', тогда /var/log/my-error.log
Я не знаю, есть ли собственный способ сделать это (но см. Нижнюю часть этого ответа), но если вы работаете в Linux, вы можете запустить несколько команд в главном журнале, например tail -f / path / to / главная / | grep errorstring> error.log tail -f / path / to / main / | grep warningstring> warning.log
Флаг -f будет следить за новыми записями. Замените errorstring или warningstring любым точным текстом, который регистрируется для всех записей типа error или type warning.
Вы можете запускать их в фоновом режиме, чтобы они не завершались при закрытии сеанса оболочки, помещая каждую команду в сценарий bash и затем выполняя его, используя следующий синтаксис nohup /path/to/script.sh> / dev / null 2 > & 1 &
Если это просто временное использование, вы можете запустить их вручную за пару сеансов экрана. При долгосрочном использовании не забудьте установить ротацию бревен, чтобы они не стали слишком большими.
Другой более естественный подход - установить пользовательскую функцию обработчика ошибок PHP для ведения журнала. Вы можете применить его ко всему PHP-коду без изменения приложения, используя ini-директиву auto_prepend_file.