Поэтому у меня есть контроллер Laravel:
class YeahMyController extends BaseController { public function getSomething() { Console::info('mymessage'); // <-- what do I put here? return 'yeahoutputthistotheresponse'; } }
В настоящее время я запускаю приложение с помощью мастера:
php artisan serve
Я хотел бы записать сообщения консоли в трубу STDOUT
для процесса ремесленника.
Вопрос касается служения через ремесленника, и поэтому ответ Жропа идеален в этом случае. Т.е. error_log
logging в журнале apache.
Однако, если ваша служба через стандартный веб-сервер просто использует специальные функции ведения журнала Laravel:
\Log::info('This is some useful information.'); \Log::warning('Something could be going wrong.'); \Log::error('Something is really going wrong.');
С текущими версиями laravel, как это для информации:
info('This is some useful information.');
Это записывается в файл журнала Laravel, расположенный по адресу /laravel/storage/logs/laravel-<date>.log
(laravel 5.0). Мониторинг журнала – linux / osx: tail -f /laravel/storage/logs/laravel-<date>.log
Ага!
Это можно сделать с помощью следующей функции PHP:
error_log('Some message here.');
Нашел ответ здесь: напечатайте что-то на встроенном веб-сервере PHP
Я не пробовал это сам, но быстрый поиск в библиотеке подсказывает, что вы можете это сделать:
$output = new Symfony\Component\Console\Output\ConsoleOutput(); $output->writeln("<info>my message</info>");
Я не мог найти ярлык для этого, так что вы, вероятно, захотите создать фасад, чтобы избежать дублирования.
Чтобы лучше объяснить ответ Дэйва Моррисси, я сделал эти шаги для переноса с классом Console Output в фасад laravel.
1) Создайте фасад в папке предпочтений (в моем случае app \ Facades):
class ConsoleOutput extends Facade { protected static function getFacadeAccessor() { return 'consoleOutput'; } }
2) Зарегистрируйте нового поставщика услуг в приложении \ Провайдеры следующим образом:
class ConsoleOutputServiceProvider extends ServiceProvider { public function register(){ App::bind('consoleOutput', function(){ return new \Symfony\Component\Console\Output\ConsoleOutput(); }); }
}
3) Добавьте все эти материалы в файл config \ app.php, зарегистрировав поставщика и псевдоним.
'providers' => [ //other providers App\Providers\ConsoleOutputServiceProvider::class ], 'aliases' => [ //other aliases 'ConsoleOutput' => App\Facades\ConsoleOutput::class, ],
Вот так, теперь в любом месте вашего приложения Laravel просто вызовите свой метод таким образом:
ConsoleOutput::writeln('hello');
Надеюсь, это поможет вам.
Если вы хотите войти в STDOUT, вы можете использовать любой из способов, предоставляемых Laravel; например (из ответа wired00):
Log::info('This is some useful information.');
Магия STDOUT может быть выполнена следующим образом (вы устанавливаете файл, куда идут info
сообщения):
Log::useFiles('php://stdout', 'info');
Осторожно: это строго для отладки. Не используйте ничего в производстве, которое вы не вполне понимаете.
Я использую это для Lumen, уверен, что он будет работать и с Laravel
shell_exec('echo "hello world" 1>&2');