Checking Laravel Logs in a Docker Container: A Step-by-Step Guide

Praveen Kumar Palai
3 min readJun 26, 2024

--

If you’ve ever found yourself scratching your head over why your Laravel app isn’t behaving as expected, you know how crucial logs can be. They’re like the black box of your application, holding the keys to understanding what’s gone wrong. But what happens when your Laravel app is running inside a Docker container? How do you access those precious logs? Fear not, fellow developer! Here’s a friendly guide to help you navigate through this.

Step 1: Start Your Docker Container

First things first, let’s make sure your Docker container is up and running. You probably have a command similar to this in your arsenal:

docker-compose up -d

This command spins up your containers in detached mode, letting them run in the background while you sip your coffee.

Step 2: Get Inside the Container

To peek at the Laravel logs, you need to enter the container where your Laravel app is running. You can do this using the docker exec command. Replace <container_name> with the actual name of your container:

docker exec -it <container_name> bash

This command drops you into an interactive terminal session inside your container, kind of like teleporting yourself into a mini-server.

Step 3: Navigate to the Log Directory

Once inside, navigate to the directory where Laravel stores its logs. By default, Laravel logs are stashed away in the storage/logs directory. Run:

cd /var/www/html/storage/logs

Here, /var/www/html is the default path to your Laravel application within the Docker container. If your setup differs, adjust the path accordingly.

Step 4: View the Logs

Now that you’re in the right place, it’s time to read those logs. You can use cat to view the entire log file:

cat laravel.log

But if your log file is hefty and scrolling through it feels like reading “War and Peace,” you might prefer tail to peek at the most recent entries:

tail -f laravel.log

The -f option tells tail to keep following the log file, and updating the display with new log entries as they happen. It's like watching a live detective story unfold.

Bonus Tips: Making Logs More Accessible

Logging to Stdout

For an even more streamlined experience, you can configure Laravel to output logs directly to stdout (standard output), which Docker captures and makes accessible through its logging mechanism.

Edit your config/logging.php file and adjust the stack channel to include stdout:

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'stdout'],
],
'stdout' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stdout',
],
],
// other channels...
],

With this setup, you can view logs directly from your host machine using:

docker logs <container_name>

Using Docker Volumes

Another approach is to map the logs directory to your host machine using Docker volumes. This way, you can access log files directly on your host without entering the container.

In your docker-compose.yml:

services:
app:
volumes:
- ./storage/logs:/var/www/html/storage/logs

Now, your logs on the host machine will always reflect the logs inside the container.

Conclusion

There you have it! Accessing Laravel logs within a Docker container isn’t as daunting as it might seem. With these steps, you can dive into those logs, troubleshoot issues, and get your app back on track in no time. Happy debugging! 🚀

Feel free to share your tips or ask questions in the comments. After all, we’re all in this coding adventure together!

--

--