Managing Logs with Docker Volumes

Learn about Docker volumes and how they can be used to manage and store logs.

So far, we've been using Go's log package to log messages and then Zap to add some structure to the logs. We 've also seen how we can either output the logs to the console or store them in a file. Saving logs to a file is obviously the preferable option in any real-world applications because we could need them later for debugging or analytics. But how does this work in the case of an app that is running inside a Docker container since we know that in such a case, any files created would reside inside the container and wouldn't be accessible from outside? Well, that's not strictly true. Let's see how.

Docker volumes

We've made changes to our app such that the logs get written in the app container. But how can we access them from outside the container? After all, that's where we will need them in order to check them. Besides, all local container files get destroyed if the container is destroyed. This will be highly undesirable because we won't be able to access logs to debug in case of a crash.

Docker Compose provides a simple solution to this. Docker volumes can be used in a Docker container to persist the data generated by the app inside the container. This is done by mapping a storage directory outside the container to one inside it.

It can be done either via the CLI using Docker commands or by making a few changes to the docker-compose.yml file. Before we get into that, let's use Zap to store our logs files at a particular path.

Writing logs to a path

Let's set up logs in our app and store them in the file logs.txt in the folder logs as follows:

Get hands-on with 1200+ tech skills courses.