diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 680fec68..98a54c74 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -67,6 +67,7 @@ export default defineConfig({ { text: "Healthcheck", link: "/guide/healthcheck" }, { text: "Remote Hosts", link: "/guide/remote-hosts" }, { text: "Supported Env Vars", link: "/guide/supported-env-vars" }, + { text: "Logging Files on Disk", link: "/guide/log-files-on-disk" }, { text: "Analytics", link: "/guide/analytics" }, ], }, diff --git a/docs/guide/log-files-on-disk.md b/docs/guide/log-files-on-disk.md new file mode 100644 index 00000000..38b37442 --- /dev/null +++ b/docs/guide/log-files-on-disk.md @@ -0,0 +1,21 @@ +--- +title: Following Log Files on Disk +--- + +# Following Log Files on Disk + +Some containers do not write logs to `sysout` or `syserr`. Many folks have asked if Dozzle can also show logs that are written to files. Unfortunately, files in containers are not accessible to other containers and so Dozzle wouldn't have a way to access these files. Dozzle can only access logs written to `sysout` or `syserr` which is the same functionality of `docker logs` command. + +If you are creating a service using Docker then make sure to write logs to streams. An application should not attempt to write to logfiles. Instead delegate the logging to Docker. The [twelve factor app](https://12factor.net/logs) has a great principle around logging that explains the importance of this principle. + +However, there are workarounds to be able to still access files using mounts. + +## Mounting Local Log Files with Alpine + +Dozzle reads any output stream. This can be used in combination with alpine to `tail` a mounted file. An example of this is: + +```sh +docker run -v /var/log/system.log:/var/log/test.log alpine tail -f /var/log/test.log +``` + +In the above example `/var/log/system.log` is mounted from the host and used with `tail -f` to follow the file. `tail` is smart to follow log rotations. During my testing, using alpine only uses about `300KB` of memory.