it-swarm-id.com

Penebangan: Mengapa dan Apa?

Saya tidak pernah menulis program yang menggunakan logging secara signifikan. Yang paling saya lakukan adalah menangkap jejak stack ketika pengecualian terjadi.

Saya bertanya-tanya, berapa banyak orang yang login? Apakah itu tergantung pada jenis aplikasi yang Anda tulis? Apakah Anda menemukan log yang benar-benar bermanfaat?

40
Winston Ewert

Untuk pekerjaan yang saya lakukan sebagian besar aplikasi tertanam, masuk alat yang sangat berharga. Setidaknya kesalahan harus dicatat dengan informasi yang cukup untuk menunjuk ke baris kode. Selanjutnya, akan menjadi titik fungsi utama di seluruh aplikasi. Hal-hal seperti admin mengakses mesin. Kami menggunakan sistem yang memungkinkan kami untuk mengaktifkan lebih banyak logging verbose. Ini biasanya khusus untuk pengembang. Ini dapat digunakan untuk membantu pengembang selama pengujian fitur atau untuk mendiagnosis masalah pelanggan.

Saya pribadi menggunakan pencatatan di semua aplikasi yang saya kembangkan. Itu selalu mengarah pada pemahaman yang lebih baik tentang aliran aplikasi. Apalagi ketika berada di tangan seorang pelanggan. Mereka tidak pernah (jarang) membatasi kasus penggunaannya pada kasus yang Anda uji.

24
Jeff

Saya tidak berpikir itu tergantung pada jenis aplikasi: logging berguna dalam semua (non-sepele) aplikasi. Tentu saja, saya kira, itu bisa lebih berguna dalam beberapa aplikasi daripada yang lain, tapi saya tidak berpikir itu pernah tidak berguna.

Khususnya, dalam kasus kesalahan, jejak tumpukan akan memberi tahu Anda keadaan program pada tepat titik kegagalan, tetapi Anda memiliki sedikit petunjuk tentang status ( sesaat sebelumnya ke kesalahan. Informasi itu bisa sangat berguna dalam melacak masalah, dan penebangan dapat memberikan wawasan yang bermanfaat tentang hal itu. Saya pikir itu adalah sesuatu yang semua, kecuali yang paling sepele, dari program dapat memperoleh manfaat.

Penggunaan logging lainnya, yang mungkin tidak berguna untuk semua program, adalah dalam analisis statistik. Misalnya, server web Anda biasanya mencatat setiap permintaan yang masuk, dan kemudian ada banyak alat yang dapat menganalisis log tersebut dan menghasilkan grafik dari waktu tersibuk Anda, sebagian besar halaman populer dan sebagainya. Anda dapat menggunakan data itu untuk melakukan perencanaan kapasitas ("apakah saya perlu server yang lebih besar?") Dan seterusnya.

19
Dean Harding

Ada dua alasan dilakukannya penebangan:

  1. Diagnostik
  2. Audit

Pencatatan diagnostik telah dibahas oleh orang lain dan saya tidak akan terlalu banyak mempermasalahkan hal ini. Saya hanya akan mengatakan Anda harus sangat memikirkan apa yang terjadi jika ada kegagalan log? Apakah Anda cukup peduli untuk melempar pengecualian melalui aplikasi atau mengelolanya dengan cara lain? Ini adalah "tergantung" tetapi mencatat info level info mungkin harus dilewati.

Audit logging adalah persyaratan bisnis. Log masuk audit menangkap peristiwa penting dalam sistem dan yang menjadi perhatian manajemen dan elang hukum. Ini adalah hal-hal seperti siapa yang menandatangani sesuatu, siapa yang melakukan apa yang diedit, dll. Sebagai sysadmin atau pengembang yang memecahkan masalah sistem, Anda mungkin hanya sedikit tertarik pada ini. Namun, dalam banyak kasus logging semacam ini benar-benar merupakan bagian dari transaksi dan harus gagal seluruh transaksi jika tidak dapat diselesaikan.

Memikirkan keduanya secara terpisah sangat membantu bagi saya bukan hanya karena yang satu "opsional" dan yang lain wajib, tetapi karena tergantung pada persyaratan, saya mungkin benar-benar perlu mengimplementasikannya secara terpisah. Bisa jadi suatu kasus (kadang-kadang) bahwa keduanya adalah buah, tetapi satu adalah apel dan jeruk lainnya. Biasanya, satu kerangka kerja logging dapat menangani keduanya.

9
MIA

Dalam sebagian besar tugas server, pencatatan sangat penting, karena admin biasanya tidak ada ketika ada hal-hal yang terjadi, jadi ia harus memeriksa faktanya.

Tapi, seorang pria di Google pernah mengatakan kepada saya bahwa proses server mereka tidak melakukan pendataan; sebaliknya, mereka 'diinstrumentasi'; itu berarti bahwa setiap proses memiliki kait atau port (dia tidak menentukan mekanika) di mana proses lain dapat menempel untuk meminta parameter, dan statistik. Proses pemantauan itulah yang menyimpan banyak hal pada log, keuntungannya adalah informasi yang mereka peroleh bukan "membuka file", "tulis ini", "ambil itu"; mereka mendapatkan hal-hal seperti "45.453 file terbuka", "653 klien layanan X", "rata-rata respons 344 ms untuk kueri Y"

Tentunya pendekatan yang berbeda, dan yang cenderung saya ingat ketika saya menjaga sistem saya, bahkan jika mereka beberapa pesanan besarnya lebih kecil.

8
Javier

Saya berasal dari aplikasi N-Tiered winforms yang mencatat semuanya.

Itu tidak terlalu berguna.

Tentu, pengecualian logging sangat bagus; tetapi mengapa memasukkan mereka ke mesin klien ketika Anda bisa mengirim email pengecualian ke tim pengembang?

Informasi pencatatan dengan mudah berubah menjadi kecanduan yang nilainya jarang dibenarkan. Untuk setiap situasi di mana Anda dapat login dengan bebas, lebih baik mengumpulkan informasi yang ditargetkan dan mengirimkannya ke tempat yang Anda perlukan.

4
George Stocker

Menangkap informasi pengecualian adalah suatu keharusan karena dapat sangat membantu sampai batas tertentu. Tetapi kadang-kadang informasi pengecualian tidak cukup terutama jika pengguna aplikasi/klien tidak dapat melaporkan kesalahan dengan informasi yang tepat.

Apakah logging terbatas hanya untuk menangkap informasi kesalahan?

Dalam kasus saya (aplikasi web), saya selalu mencatat halaman mana yang dikunjungi, kapan, apa yang mereka klik, di mana ip & browser, dll. Saya bahkan mencatat total waktu muat untuk setiap kunjungan halaman, sehingga saya bisa tahu halaman mana yang lambat dan perlu optimasi. jadi saya bisa mengatakan bahwa saya login sebanyak mungkin.

pada awalnya, saya tidak tahu seberapa penting hal itu. tetapi ternyata ini sangat membantu dalam banyak hal (selain debugging):

  • memahami perilaku pengguna
  • mengevaluasi penerimaan fitur baru
  • membedakan antara pengadopsi awal, scammer atau pelanggan potensial

Saya pikir, logging bisa menjadi lebih signifikan jika kita suka menggali informasi statistik di dalamnya.

4
Anwar Chandra

Saya seorang pengembang di perusahaan yang produknya digunakan di luar negeri. Ketika tim pendukung datang menanyakan tentang definisi masalah, satu-satunya alat saya untuk diagnosis adalah file log saya dan salinan database pelanggan. Menggunakan database dan lingkungan pengembangan saya, saya memiliki kesempatan untuk mereproduksi kasus yang salah, karena saya mencatat data yang masuk ke modul saya dan tindakan terkait. Jika saya bisa mereproduksi kesalahan dengan bantuan data yang saya kumpulkan, maka saya bisa memperbaikinya dengan debugging. Jika saya tidak memiliki file log, maka saya harus bergantung pada deskripsi pelanggan atau tim pendukung tentang apa yang terjadi dalam kasus apa (yang memiliki peluang besar untuk menyesatkan).

Kedua, logging memberi saya kesempatan untuk mendeteksi kemacetan modul saya di situs yang dikerahkan, karena saya mencatat tanggal & waktu tindakan tertentu dan kemudian saya bisa melihat di mana tindakan menghabiskan banyak waktu.

Selain itu, misalkan solusi kami terdiri dari 6 modul dan saya melihat log kesalahan dalam file log saya tentang batas waktu basis data. Jika kesalahan ini masuk 5 modul lain juga, maka kemungkinan ini adalah masalah terkait SQL server menjadi lebih besar. Jika ini hanya dicatat dalam modul saya, maka probabilitas bahwa pertanyaan saya bermasalah semakin besar. Saya pikir hal-hal semacam ini adalah indikator yang berguna.

Tentang jenis data apa yang saya lihat di file log saya tergantung pada konfigurasi level log. Jika ini adalah produk baru, kami mengatur level log ke "Semua" untuk mengumpulkan sebanyak mungkin data. Tetapi ketika kami meningkatkan produk, kami mungkin lebih suka menjaga level log pada "Kesalahan" hanya mencatat kesalahan, tetapi tidak pada tingkat informasi log, dll ...

2
aslisabanci

Pencatatan berguna untuk informasi yang tidak dapat Anda peroleh dengan program lain:

  • Tangkap jejak tumpukan (Anda mendapatkannya)
  • Tangkap data apa yang sedang diproses saat aplikasi Anda macet. Ingat, debuggers hanya membantu jika mereka hadir ketika crash terjadi.
  • Informasi profil. Jika Anda tidak dapat menjalankan profiler di lingkungan produksi, pencatatan ekstensif termasuk cap wakt dapat membantu Anda mengetahui ke mana perginya waktu. Bahkan tidak dapat memberi tahu dapat membantu Anda mengidentifikasi bahwa itu di luar program Anda (mis. Pengumpulan sampah yang dimulai).
  • Statistik tidak diharapkan saat menulis program. Saya telah diminta untuk memberikan grafik perilaku dari waktu ke waktu untuk interval yang menarik karena alasan lain. Data yang diperlukan dapat diekstraksi dari file log dengan sedikit trik grep + awk + Perl ninja.

Catatan: Anda ingin setidaknya dua file log.

  • Satu di tingkat DEBUG - memberikan semua informasi yang dapat Anda bayangkan akan Anda butuhkan (termasuk INFO dan yang lebih tinggi). Jika itu terlalu banyak, maka pertimbangkan untuk memiliki level TRACE tambahan.
  • Satu di tingkat INFO - memberikan tinjauan 10.000 meter dari sistem. Tonggak penting di sini.

INFO selalu aktif. DEBUG aktif saat dibutuhkan.

Tulis kode logging untuk mengantisipasi bahwa suatu hari nanti Anda harus men-debug situasi di mana SEMUA yang Anda miliki adalah file log, dan melakukannya dengan benar mungkin merupakan perbedaan antara dipecat dan dipromosikan.

Untuk ekstra, minta semua panggilan fungsi menambahkan parameternya ke jejak tumpukan apa pun, di Java dengan

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

Pendekatan ini pada dasarnya meningkatkan tumpukan panggilan Anda dengan nilai parameter, dan dapat memungkinkan Anda untuk menganalisis situasi hanya dengan jejak tumpukan dan tidak harus melihat file log.

2
user1249

Penebangan selalu bermanfaat. Tetapi ketika implementasi menyadari itu tidak harus Anda, siapa yang akan membaca log. Mungkin itu semacam admin, pengguna akhir, pelanggan, tim pendukung, ...

Jadi jangan hanya login stacktraces, tetapi juga beberapa informasi tambahan yang bisa diartikan oleh non-developer. Ketika aplikasi Anda dikelola oleh beberapa kelompok lain, juga bermanfaat untuk menulis beberapa kode kesalahan unik ke log Anda. Ini dapat memudahkan dukungan, otomatisasi, ...

Poin lain dari perspektif admin: Pikirkan tentang rotasi log.

1
Christian

Saya juga akan merekomendasikan bahwa semua aplikasi non-sepele menggunakan multi-level logging.

Karena alasan yang dinyatakan orang lain, ini adalah alat yang sangat berharga untuk menyelesaikan masalah dengan aplikasi.

Dalam beberapa kasus, pencatatan sangat penting, misalnya dalam aplikasi keuangan dan domain lain yang memerlukan log aktivitas, untuk keamanan, metrik penggunaan, dan audit.

1
ocodo

Ini tentu saja tergantung pada jenis sistem yang Anda bangun.

Jika Anda menulis aplikasi desktop yang berdiri sendiri, seperti pengolah kata, maka Anda mungkin tidak perlu login.

Jika Anda menulis sistem tertanam, maka Anda tidak dapat hidup tanpa login. Jika tidak, ketika perangkat tertanam Anda membeku, Anda tidak tahu mengapa. Anda juga perlu masuk kapan pun sistem Anda melibatkan banyak proses atau beberapa mesin fisik yang saling berkomunikasi. Sekali lagi, ketika sistem hang, Anda perlu tahu bagian mana yang mati kapan dan mengapa. Anda harus dapat membandingkan log untuk menentukan apakah data membuatnya melintasi dari satu proses ke proses lainnya. Dengan cara yang sama, Anda perlu mencatat kapan pun sistem Anda dimaksudkan untuk berjalan untuk waktu yang lama tanpa banyak interaksi pengguna langsung.

1
Dima