Как писать на консоль с Laravel Controller?

Поэтому у меня есть контроллер 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');