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.
Database
lebih dari satu file teks ...a User Activity Logger that hooks up various events
, Anda dapat melihatnya di sini: stackoverflow.com/questions/30326673/… . Nikmati!Jawaban:
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.
sumber
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
sumber
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:
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)Done: 49ms
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.
sumber
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.
sumber
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.
sumber
Coba Log4Net. Ini memungkinkan Anda untuk login file atau database. Inilah Tutorial !
Kami menggunakan Log4Net di semua proyek kami.
sumber
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.
sumber