Praktik terbaik untuk mencatat tindakan pengguna dalam produksi

22

Saya berencana mencatat banyak hal berbeda di lingkungan produksi saya, hal-hal seperti ketika pengguna:

  • Masuk, Keluar
  • Ubah Profil
  • Edit pengaturan Akun
  • Ubah kata sandi ... dll

Apakah ini praktik yang baik untuk dilakukan di lingkungan produksi? Juga apa cara yang baik untuk mencatat semua ini. Saat ini saya menggunakan blok kode berikut untuk masuk:

public void LogMessageToFile(string msg)
        {

            System.IO.StreamWriter sw = System.IO.File.AppendText(
                GetTempPath() + @"MyLogFile.txt");
            try
            {
                string logLine = System.String.Format(
                    "{0:G}: {1}.", System.DateTime.Now, msg);
                sw.WriteLine(logLine);
            }
            finally
            {
                sw.Close();
            }
        }

Apakah ini boleh untuk produksi? Aplikasi saya sangat baru sehingga saya tidak mengharapkan jutaan pengguna segera atau apa pun, mencari praktik terbaik untuk melacak tindakan di situs web atau jika itu praktik terbaiknya.


sumber
1
Saya mungkin akan menyarankan Databaselebih dari satu file teks ...
@DaveZych: tergantung pada tujuan pencatatan. Jika pelacakan / penelusuran kesalahan adalah bagian dari tujuan itu, basis data tidak ada. Lihat programmers.stackexchange.com/questions/92186/…
Marjan Venema
Saya melakukan implementasi dasar a User Activity Logger that hooks up various events, Anda dapat melihatnya di sini: stackoverflow.com/questions/30326673/… . Nikmati!
Jeremy Thompson

Jawaban:

30

Ini bukan jawaban langsung untuk pertanyaan, lebih merupakan perluasan dari itu.

Saat Anda meluncurkan aplikasi baru, saya sarankan untuk mencatat semua yang dilakukan pengguna: masuk, keluar, gores a ** mereka, semuanya. Jika berbasis web, pertimbangkan untuk menggunakan peta panas sehingga Anda tahu apa yang dilakukan mouse mereka.

Ketika saya berada di proyek BravoX di Xerox pada akhir 70-an, kami merekam gerakan mouse piksel demi piksel untuk mengetahui bagaimana pengguna dapat menggunakan hal aneh ini yang disebut editor WYSIWYG. Kami akan menonton pemutaran sesi pengguna selama makan siang. Itu sangat instruktif. Kami menemukan pola penggunaan yang kami sebut Charlie Browning — pengguna akan memilih beberapa teks dan membuatnya miring ... maka mereka akan membatalkan ... lalu mereka akan mengulang ... bolak-balik, bolak-balik. Ternyata mereka berusaha memahami hal-hal ini pada tingkat emosional. Jadi kami (Greg Kusnik melakukan kode, jika ingatanku) memasukkan beberapa optimasi khusus untuk mendukung perilaku ini.

Tanpa rekaman kita tidak akan pernah berpikir untuk melakukan ini.

Peter Rowell
sumber
1
Anda bisa menulis buku yang hanya berpusat pada komentar ini!
Uskup
Jenis pencatatan khusus ini adalah tentang pengalaman pengguna waktu nyata, jadi saya tidak akan menjadi penulisnya. Saya adalah Tn. Hardcopy. Ketika Anda menekan Print, saya mengambil representasi internal dokumen, mengubahnya menjadi bahasa deskripsi halaman, lalu mengirimkannya melalui benda aneh bernama Ethernet ke printer laser pertama di dunia, yang berada di ujung lorong. Kelompok yang paling banyak berinteraksi dengan saya adalah Departemen Tipografi Senat AS dan kelompok percetakan IMF, 2 dari situs pengujian beta terbaik kami yang paling banyak diminati. Saya belajar banyak tentang tata letak, font, dll. Dari orang-orang itu. Waktu yang baik.
Peter Rowell
9

Jika saya adalah Anda dan saya tetap menulis dengan file teks saya akan menggunakan log4net dan login ke file "UserActions.log" tertentu. Dengan cara ini tidak membingungkan logging normal Anda. Dengan menggunakan log4net (atau kerangka logging lain), Anda dapat menghindari menciptakan kembali roda dan meningkatkan file appner bergulir, memperingatkan / kesalahan / debug / kode info, menulis file batch, dll. Selalu merupakan ide yang baik untuk membangun login yang baik ke dalam aplikasi tingkat produksi apa pun.

Pada kenyataannya, mungkin lebih baik menyimpan semua informasi ini dalam database. Menggunakan basis data akan membuat Anda mengurutkannya, mengumpulkannya, dan melakukan statistik dengan lebih mudah

devshort
sumber
3
Anda dapat memiliki kue dan memakannya: ada DatabaseAppender untuk log4net: logging.apache.org/log4net/release/config-examples.html . Tetapi jika Anda khawatir tentang kinerja, Anda juga dapat masuk ke file dan menguraikannya di layanan terpisah, menyiapkan data untuk pelaporan yang lebih cepat (yang bisa menjadi database laporan).
Grimace of Despair
9

File log digunakan 1. untuk mendapatkan informasi tentang kesalahan sistem debugging. 2. untuk meneliti aktivitas pengguna untuk kerusakan, atau 3. untuk memahami bagaimana orang menggunakan sistem ketika Anda tidak bisa menonton mereka. Dengan mengingat hal itu:

  • Log environment (mis. Vars environment, pengaturan lain, dll.) Pada startup aplikasi. Ini bermanfaat untuk masalah debugging.
  • Catat pengguna dan tindakan (bagian berbeda dari URL) untuk setiap permintaan.
  • Log semua parameter untuk setiap permintaan KECUALI untuk kata sandi. Saya suka menempatkan pembatas di sekitar setiap parameter dalam log misalnya phone{(999)999-9999} email{[email protected]}. Kata sandi tidak boleh ditulis di mana pun kecuali ke basis data dengan satu cara, fungsi hash yang aman secara kriptografis dengan garam unik untuk setiap pengguna dan beberapa putaran hashing (lihat catatan kaki)
  • Saat masuk, Anda harus mencatat alamat ip pengguna, ID pengguna, nama, jumlah login gagal, mungkin browser, mungkin id sesi cookie, tetapi tidak pernah kata sandi.
  • Ingatlah untuk tidak mencatat kata sandi di halaman login DAN halaman kata sandi ganti, Anda juga tidak harus mencatat pertanyaan atau jawaban rahasia jika Anda memiliki fungsi itu. Kata sandi atau kunci enkripsi lainnya tidak boleh dicatat. Ini adalah praktik yang baik untuk menulis sekitar enam bintang pada log untuk parameter ini sehingga Anda dapat melihat bahwa Anda ingat untuk menekan data ini.
  • Saya suka mencatat total waktu yang dibutuhkan untuk melayani setiap permintaan: Done: 49ms
  • Saya suka mencatat perubahan ke status sesi. Ini harus langka.
  • Seperti yang dikatakan orang lain, ada banyak pustaka pendataan di luar sana untuk masuk ke file, tidak yakin tentang cara masuk ke database.
  • Simpan log dengan aman. Bahkan tanpa kata sandi, ada undang-undang negara bagian, federal, dan internasional tentang Informasi Identifikasi Pribadi (lihat Safe Harbor ) yang membuat data log bersifat rahasia.
  • Ambil cadangan. Jika Anda membiarkan mereka mengalir ke cadangan drive penuh setiap malam, pastikan untuk mengingatnya untuk mencadangkannya di tempat lain sebelum memutakhirkan ke server baru (jangan tanya bagaimana saya belajar ini).

Tips lainnya

Catatan Kaki: Untuk login seseorang, hash kata sandi yang disediakan dengan algoritma hashing yang sama dan garam dari hash asli untuk pengguna itu. Jika hash kata sandi yang disediakan cocok dengan hash kata sandi yang disimpan dalam database, maka kata sandi tersebut masuk. Agar ini berfungsi, Anda harus menentukan karakter yang ditetapkan untuk kata sandi Anda, melarang karakter substitusi Unicode dan karakter lain apa pun di luar rangkaian Anda.

GlenPeterson
sumber
2

Anda tidak menentukan apakah Anda menggunakan database tetapi jika Anda dan database itu adalah SQL Server, maka Anda bisa menambahkan sesuatu yang disebut AutoAudit dan secara otomatis mencatat semua interaksi dengan data Anda. Pastikan untuk menentukan hanya objek yang ingin diaudit.

Tapi bagaimanapun, saya tidak akan mencoba untuk kode pelacakan saya secara manual karena akan berakhir dengan mimpi buruk pemeliharaan.

Juga, untuk masuk, jangan gulung sendiri, gunakan Pencatatan Perpustakaan Perusahaan atau Log4Net atau yang serupa.

Richard
sumber
2

Hanya saran umum. Mungkin tidak terkait langsung dengan pertanyaan Anda.

Tergantung pada apa Anda akan menggunakan log? Sebagian besar log digunakan dalam produksi untuk mendeteksi operasi yang menyebabkan kesalahan. Jika Anda menyimpannya untuk melacak tindakan pengguna, maka itu bukan bagian dari log. Itu harus menjadi fitur sisi server dari produk. Hal-hal ini tentunya perlu dimasukkan ke dalam database untuk studi nanti. Tetapi log sisi server seperti, "Kesalahan terjadi karena beberapa teks kosong", bukan bagian dari fitur. Hal-hal ini perlu masuk dalam sistem file. Mereka harus memiliki konten berikut: - user_id, error_number, error_text, file_name, function_name, thread_id, system_date_time, dan konteks lainnya.

Sekarang saya hanya berbicara tentang log dalam file.

1) Simpan asinkronnya. Operasi I / O itu mahal.

2) Rancang mereka sebagai kelas daripada fungsi. Perubahan di masa depan akan mudah.

3) Jaga mereka tetap tunggal, jika mungkin. Singleton sulit dalam multi-utas, jadi desainlah dengan baik.

4) Juga lebih baik untuk menjaga interaksi antara logger dan loggee sederhana. Sebagian besar waktu mengirim jumlah_pesan daripada message_text aktual, dan biarkan logger mendapatkan pesan dari nomor. Ini akan membantu jika nanti kita ingin membuat perubahan dalam format log generik.

Biasanya logger dan juga hal-hal yang perlu kita login harus menjadi bagian dari desain. Saya telah melihat kasus di mana ada perubahan dalam desain hanya untuk memastikan bahwa semua informasi yang relevan dicatat dengan benar.

Manoj R
sumber
1

Coba Log4Net. Ini memungkinkan Anda untuk login file atau database. Inilah Tutorial !

Kami menggunakan Log4Net di semua proyek kami.

bittech
sumber
0

Menggunakan file log menyajikan beberapa masalah. Pertama, Anda mungkin mendapatkan kesalahan saat beberapa proses mencoba mengakses file. Anda juga bisa mendapatkan masalah ketika mencoba untuk menggilir atau menghapus file saat sistem Anda sedang berjalan. Cara mengatasinya adalah dengan menggunakan database.

Jadi, langkah 1 adalah membuat tabel database. Saya menyarankan bidang-bidang berikut:
*
tindakan userID * (misalnya masuk, hapus foo)
* Beberapa teks deskriptif (bolehkan nulls di sini)
* timestamp

Langkah 2, Buat prosedur tersimpan dengan input untuk ID pengguna, tindakan dan teks deskriptif. Cukup gunakan waktu saat ini untuk membuat cap waktu.

Langkah 3, Tulis metode pencatatan di pustaka bersama yang mudah digunakan sehingga mudah untuk dimasukkan di mana-mana dan berlatih memanggil metode itu sesuai kebutuhan. Anda mungkin ingin memiliki logika bendera level pencatatan juga untuk mengubah apa yang dicatat.

Langkah 4, Buat rutinitas perawatan untuk menghapus pesan lama dari tabel logging dari waktu ke waktu. Mungkin menghapus ketika lebih tua dari X, jalankan setiap minggu atau lebih sebagai bagian dari pemeliharaan DB biasa (pembangunan kembali indeks, dll).

Setelah Anda membangun ini sekali, Anda harus dapat menggunakan kode yang terlibat dalam proyek lain.

adam f
sumber