Tidak perlu mengalihkan log.
Docker secara default menyimpan log ke satu file log. Untuk memeriksa jalur file log, jalankan perintah:
docker inspect --format='{{.LogPath}}' containername
/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
Buka file log itu dan analisis.
jika Anda mengarahkan log maka Anda hanya akan mendapatkan log sebelum pengalihan. Anda tidak akan dapat melihat log langsung.
EDIT:
Untuk melihat log langsung, Anda dapat menjalankan perintah di bawah ini
tail -f `docker inspect --format='{{.LogPath}}' containername`
catatan:
File log ini /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
akan dibuat hanya jika buruh pelabuhan menghasilkan log jika tidak ada log maka file ini tidak akan ada. Ini mirip seperti saat kita menjalankan perintah docker logs containername
dan tidak mengembalikan apa-apa. Dalam skenario itu, file ini tidak akan tersedia.
tail -f `docker inspect --format='{{.LogPath}}' myapp`
- Ini benar-benar JSONBagaimana dengan opsi ini:
docker logs containername >& logs/myFile.log
Ini tidak akan mengalihkan log yang diminta dalam pertanyaan, tetapi menyalinnya sekali ke file tertentu.
sumber
docker logs --help
memastikannyadocker logs -f <yourContainer> &> your.log &
Penjelasan:
-f
(yaitu--follow
): menulis semua log yang ada dan melanjutkan ( mengikuti ) mencatat semua yang muncul berikutnya.&>
mengarahkan ulang keluaran standar dan kesalahan standar.&
.> output.log 2> error.log
(daripada menggunakan&>
).sumber
Untuk menangkap baik stdout & stderr dari kontainer buruh pelabuhan Anda ke satu file log, jalankan perintah berikut:
sumber
Dengan asumsi Anda memiliki banyak penampung dan Anda ingin menggabungkan log menjadi satu file, Anda perlu menggunakan beberapa agregator log seperti fluentd. fluentd didukung sebagai driver logging untuk kontainer buruh pelabuhan.
Jadi di docker-compose, Anda perlu menentukan driver logging
Langkah kedua adalah memperbarui konfigurasi fluentd untuk memenuhi log untuk layanan 1 dan layanan 2
Dalam konfigurasi ini, kami meminta log untuk ditulis ke satu file ke jalur ini
/fluentd/log/service/service.*.log
dan langkah ketiga adalah menjalankan fluentd yang disesuaikan yang akan mulai menulis log ke file.
Ini dia tautan untuk petunjuk langkah demi langkah
Bit Long, tapi cara yang benar karena Anda mendapatkan lebih banyak kendali atas jalur file log dll dan itu bekerja dengan baik di Docker Swarm juga.
sumber
Karena Docker menggabungkan stdout dan stderr untuk kita, kita dapat memperlakukan keluaran log seperti aliran shell lainnya. Untuk mengarahkan log saat ini ke file, gunakan operator redirection
$ docker logs test_container > output.log
docker logs -f test_container > output.log
Alih-alih mengirim keluaran ke stderr dan stdout, alihkan keluaran aplikasi Anda ke sebuah file dan petakan file tersebut ke penyimpanan permanen di luar penampung.
$ docker logs test_container> /tmp/output.log
Docker tidak akan menerima jalur relatif pada baris perintah, jadi jika Anda ingin menggunakan direktori yang berbeda, Anda harus menggunakan jalur lengkap.
sumber
Jika Anda bekerja di Windows dan menggunakan PowerShell (seperti saya), Anda dapat menggunakan baris berikut untuk menangkap
stdout
danstderr
:Saya harap ini membantu seseorang!
sumber
foreach ($element in $(docker ps -a --format "{{.Names}}")) {docker logs $element | Out-File "C:/dockerlogs/$element.log"}
Cara termudah yang saya gunakan adalah perintah ini di terminal:
strukturnya adalah:
sumber
Pertama periksa id penampung Anda
Anda dapat melihat baris pertama di kolom ID PENAMPUNG. Mungkin terlihat seperti ini "3fd0bfce2806" lalu ketik di shell
Anda akan melihat sesuatu seperti ini
maka Anda dapat melihatnya sebagai
Ini akan dalam format JSON, Anda dapat menggunakan stempel waktu untuk melacak kesalahan
sumber
Skrip Bash untuk menyalin semua log kontainer ke direktori tertentu:
sumber