ABP adalah kerangka kerja pengembangan web berdasarkan ASP.NET. Pengaturan log dan kerangka kerja juga relatif lengkap. Di sini, editor saluran teknologi baru akan memperkenalkan secara rinci konfigurasi dasar manajemen log dan pengaturan manajemen dalam kerangka ABP. Teman yang membutuhkan dapat merujuknya dengan cermat!
Manajemen log
Sisi server (sisi server)
ASP.NET Boilerplate menggunakan alat logging fasilitas logging Castle Windsor, dan dapat menggunakan pustaka kelas log yang berbeda, seperti: Log4net, NLOG, Serilog ... dan sebagainya. Untuk semua perpustakaan kelas log, Castle menyediakan antarmuka umum untuk mengimplementasikannya. Kami dapat dengan mudah menangani berbagai pustaka log khusus, dan mudah untuk mengganti komponen log saat bisnis membutuhkannya.
Catatan Penerjemah: Apa itu Castle: Castle adalah proyek open source untuk platform .NET, dari kerangka kerja Access ORM hingga wadah IOC, hingga kerangka kerja MVC dan AOP di lapisan web, pada dasarnya mencakup segala sesuatu dalam seluruh proses pengembangan. Wadah IOC dari asp.net boilerplate diimplementasikan melalui kastil.
LOG4NET adalah komponen pustaka log paling populer di bawah ASP.NET. Template boilerplate ASP.NET juga menggunakan komponen Log4Net Log Library. Namun, kami mengimplementasikan injeksi ketergantungan log4net hanya melalui satu baris kode kunci (secara khusus dijelaskan dalam file konfigurasi di bawah). Oleh karena itu, juga mudah untuk menggantinya dengan komponen log Anda sendiri.
Dapatkan Logger
Terlepas dari komponen pustaka log mana yang Anda pilih, itu sama untuk mencatat kode. (Keluhan di sini, antarmuka Ilogger universal Castle benar -benar luar biasa).
Mari kita ke topik: (Catatan Penerjemah: Kode berikut adalah Analisis Kode Sumber Castle.Core dan implementasi Kerangka ABP)
1. Pertama -tama, kita perlu berurusan dengan Logger Object Logger terlebih dahulu. Kerangka kerja boilerplate ASP.NET menggunakan teknologi injeksi ketergantungan ketergantungan injeksi, dan kami dapat dengan mudah menggunakan injeksi ketergantungan untuk menghasilkan logger objek logger.
Selanjutnya, mari kita lihat bagaimana asp.net boilerplate mengimplementasikan fungsi logging:
menggunakan castle.core.logging; // 1: Namespace untuk mengimpor log, castle.core.loggingpublic kelas TaskAppService: ItaskAppService {// 2: Dapatkan objek Logger melalui injeksi ketergantungan. Di sini pertama -tama kami mendefinisikan pencatat properti publik dari tipe ilogger, yang merupakan objek yang kami gunakan untuk merekam log. Setelah membuat objek TaskAppService (tugas yang ditentukan dalam aplikasi kami), itu diimplementasikan melalui injeksi atribut. Public Ilogger Logger {get; mengatur; } public TaskAppService () {// 3: Jika tidak ada logger, kembalikan logger ke instance kosong dan jangan menulis log. Ini adalah cara terbaik untuk mengimplementasikan injeksi ketergantungan, // Jika Anda tidak mendefinisikan logger kosong ini, pengecualian akan dihasilkan ketika kami mendapatkan referensi objek dan instantiate. // melakukan hal itu memastikan bahwa objek tidak kosong. Jadi, dengan kata lain, tanpa menyiapkan logger, log tidak akan direkam, dan objek nol akan dikembalikan. // Objek nulllogger sebenarnya tidak ada, kosong. Hanya dengan melakukan ini, kita dapat memastikan bahwa kelas -kelas kita mendefinisikan pekerjaan secara normal saat dipakai. Logger = nulllogger.instance; } public void createTask (input createTaskInput) {// 4: tulis untuk log Logger.info ("Membuat tugas baru dengan deskripsi:" + input.description); // TODO: Simpan tugas ke database ...}} Salinan kode adalah sebagai berikut:Info 2014-07-13 13: 40: 23.360 [8] SimpleTasksystem.Tasks.TaskAppService-Membuat tugas baru dengan deskripsi: Ingatlah untuk minum susu sebelum tidur!
Setelah menulis ke log, kita dapat melihat file log, seperti format berikut:
Menggunakan logger melalui kelas dasarKerangka kerja boilerplate ASP.NET menyediakan kelas dasar pengontrol MVC, pengontrol API Web, dan kelas layanan aplikasi (pengontrol dan layanan aplikasi yang Anda tentukan harus mewarisi kelas dasar asp.net Boilerplate.
HomeController kelas publik: SimpleTasksystemControllerbase {public actionResult index () {logger.debug ("Pesan log sampel ..."); return view (); }}Deskripsi: SimpleTasksyStemControllerbase ini pengontrol kelas dasar ini adalah pengontrol kelas dasar yang kita definisikan diri kita sendiri, dan harus mewarisi dari ABPController.
Dengan cara ini, logger dapat bekerja secara normal. Tentu saja, Anda juga dapat menerapkan kelas dasar Anda sendiri, sehingga Anda tidak dapat lagi menggunakan injeksi ketergantungan.
Konfigurasi
Jika Anda menghasilkan proyek Anda melalui Templat Boilerplate ASP.NET di situs web resmi, semua konfigurasi Log4Net dihasilkan secara otomatis.
Format konfigurasi default adalah sebagai berikut:
• Level log: Level perekaman log, 5 debug, info, peringatan, kesalahan atau fatal.
• Tanggal dan Waktu: Waktu logging.
• Nomor utas: Nomor utas saat setiap baris log ditulis.
• Nama logger: Nama logger, biasanya nama kelas.
• Teks log: Konten log yang Anda tulis.
File Konfigurasi: log4net.config biasanya terletak di direktori web proyek.
<? Xml Version = "1.0" encoding = "UTF-8"?> <GOG4NET> <nama appender = "rollingfileAppender" type = "log4net.Appender.rollingFileAppender"> <nilai file = "LOGS /LOG.TXT" /<Nilai AppendToFile = "Nilai" /> <"Log /LOG.TXT" /> <Nilai AppendToFile = "True" /<"Rolling /LOG.TXT" /> <maximumfileSize value = "10000kb" /> <staticlogfileName value = "true" /> <tata letak type = "log4net.layout.patternlayout"> Nilai ConversionPattern = " %-5Level %Date [ %-5.5Thread] %-40.40Logger %ROOLGER> < %LAY / /LAYOT / %-40.40LOGGER- %Pesan- %Pesan %Pesan" MESSAGER "MESSAGER" MESSAGLE "MEZINE / %LAY / %-40.40LOGGER- %Pesan- %Pesan- %Pesan %Pesan" MESSAGER "MESSAGER" MESSAGER "MESSRAFER" Pesan %Pesan " %MEZINGGER" MES MRIGING " Ref = "RollingFileAppender" /> <level value = "debug" /> </soot> <logger name = "nhibernate"> <level value = "warn" /> </gogger> < /log4net>
Log4Net adalah komponen perpustakaan log yang sangat kuat dan mudah digunakan. Anda dapat menulis berbagai log, seperti menulis ke file txt, menulis ke database, dll. Anda dapat mengatur level log minimum, seperti konfigurasi di atas untuk Nhibernate. Pencatat yang berbeda menulis log yang berbeda, dll.
Untuk penggunaan tertentu, silakan merujuk ke: http://logging.apache.org/log4net/release/config-examples.html
Akhirnya, dalam file global.asax proyek, tentukan file konfigurasi log4net:
Kelas Publik MVCApplication: ABPWebApplication {Protected Override void application_Start (pengirim objek, EventArgs e) {iocmanager.instance.ioccontainer.addfacility <GoggingFacility> (f => f.uselog4net (). dengan config ("log4net (" log4net ("Log4net (" Log4net ("Log4net (" Log4net ("Log4NET (" base.application_start (pengirim, e); }}Beberapa baris kode panggilan log4net, komponen logging. Perpustakaan Log4net dalam proyek ini ada dalam paket Nuget. Anda juga dapat mengubahnya ke pustaka komponen log lainnya, tetapi kode tidak perlu diubah. Karena, kerangka kerja kami mengimplementasikan logger melalui injeksi ketergantungan!
Sisi Klien (Klien)
Akhirnya, yang lebih menakjubkan adalah Anda juga dapat memanggil logger di sisi klien. Di sisi klien, kerangka kerja boilerplate ASP.NET memiliki API log JavaScript yang sesuai, yang berarti Anda dapat merekam log browser, dan kode implementasi adalah sebagai berikut:
abp.log.warn ('pesan log sampel ...');Terlampir: Klien JavaScript API. Yang perlu Anda jelaskan di sini adalah bahwa Anda dapat menggunakan Console.log untuk mengeluarkan log pada klien, tetapi API ini tidak selalu mendukung semua browser, dan dapat menyebabkan pengecualian pada skrip Anda. Anda dapat menggunakan API kami, kami aman, dan Anda bahkan dapat membebani atau memperluas API ini.
abp.log.debug ('...'); abp.log.info ('...'); abp.log.warn ('...'); abp.log.error ('...'); abp.log.fatal ('...'); abp.log.fatal ('...');Pengaturan Manajemen
memperkenalkan
Setiap aplikasi perlu menyimpan beberapa pengaturan dan menggunakannya di suatu tempat dalam aplikasi. Kerangka kerja ABP menyediakan infrastruktur yang kuat yang dapat kami tetapkan di server atau klien untuk menyimpan/mendapatkan aplikasi, penyewa, dan konfigurasi tingkat pengguna.
Pengaturan biasanya disimpan dalam database (atau sumber lain), diwakili oleh struktur yang sesuai dengan string nilai nama. Kami dapat mengonversi nilai non-string menjadi nilai string untuk penyimpanan.
CATATAN: Tentang antarmuka isettingstore
Untuk menggunakan manajemen pengaturan, antarmuka IsettingStore harus diimplementasikan. Anda dapat mengimplementasikannya dengan cara Anda sendiri, dan ada implementasi lengkap dalam proyek modul-nol untuk merujuk.
Tentukan pengaturan
Anda harus mendefinisikan pengaturan sebelum menggunakannya. Kerangka ABP adalah desain modular, sehingga modul yang berbeda dapat memiliki pengaturan yang berbeda. Untuk menentukan pengaturan modul sendiri, setiap modul harus membuat kelas turunan yang diwarisi dari SetripProvider. Contoh penyedia pengaturan adalah sebagai berikut:
Kelas Publik MySettingProvider: SettingProvider {Public override IEnumerable <SetedDefinition> GetTingDefinitions (SetDefinitionProvIderContext Context) {return new [] {pengaturan baru, "smtpserverAddress", "127.0.0.1"), "smtpserverAddress", "127.0.0.1"), "NewDefinition (" PASSIFIN "," 127.0.0.1 ")," NewDefinition ("PASSIFIN", "127.0.0.1"), "NewDefinition (" 127.0.1 "), SCOPES: Settingscopes.Application |. }}Metode GetSettingDefinitions Mengembalikan Objek Pengaturan Definisi. Konstruktor kelas Pengaturan Definisi memiliki parameter berikut:
• Nama (wajib): Harus memiliki nama unik di seluruh sistem. Cara yang lebih baik adalah mendefinisikan konstanta string untuk mengatur nama.
• Nilai default: Menetapkan nilai default. Nilai ini bisa nol atau string kosong.
• Lingkup: Menentukan ruang lingkup pengaturan (lihat di bawah).
• Nama tampilan: String yang dapat dilokalkan untuk nanti menampilkan nama set di UI.
• Deskripsi: String yang dapat dilokalkan untuk kemudian menampilkan deskripsi pengaturan di UI.
• Grup: Dapat digunakan untuk mengatur grup. Ini hanya untuk penggunaan UI dan bukan untuk menetapkan manajemen.
• ISVISIBLETOCLIENT: Pengaturan ke True akan membuat pengaturan tersedia pada klien.
Setelah membuat Pengaturan PROVIDER, kami harus mendaftarkan modul kami dalam metode preintialize:
Configuration.settings.providers.add <mysettingprovider> (); Penyedia pengaturan secara otomatis mendaftarkan injeksi ketergantungan. Oleh karena itu, penyedia pengaturan dapat menyuntikkan dependensi apa pun (seperti repositori) untuk menghasilkan beberapa sumber lain dari definisi pengaturan.
Atur jangkauannya
Ada tiga pengaturan (atau level) yang didefinisikan dalam settingscopes enum:
• Aplikasi: Pengaturan seluruh aplikasi digunakan untuk pengaturan independen pengguna/penyewa. Misalnya, kami dapat menentukan pengaturan yang disebut "SmtpserverAddress" yang mendapatkan alamat IP server saat mengirim email. Jika pengaturan ini memiliki nilai tunggal (tidak diubah berdasarkan pengguna), maka kami dapat mendefinisikannya sebagai ruang lingkup aplikasi.
• Penyewa: Jika aplikasi ini multi-penyewa, kami dapat menentukan pengaturan khusus penyewa.
• Pengguna: Kami dapat menggunakan pengaturan seluruh pengguna untuk menyimpan/mendapatkan nilai set untuk setiap pengguna.
Settingscopes enum memiliki properti bendera, sehingga kami dapat menentukan pengaturan dengan beberapa lingkup.
Kisaran pengaturan adalah hierarkis. Misalnya, jika kita mendefinisikan rentang pengaturan untuk "aplikasi | penyewa | pengguna" dan mencoba untuk mendapatkan nilai yang saat ini ditetapkan;
• Kami mendapatkan nilai pengguna tertentu jika mendefinisikan (menulis ulang) pengguna.
• Jika tidak, kami mendapatkan nilai penyewa spesifik jika mendefinisikan (menulis ulang) penyewa.
• Jika tidak, kami mendapatkan nilai aplikasi jika mendefinisikan aplikasi.
• Jika tidak, kami mendapatkan nilai default.
Nilai default bisa nol atau string kosong. Jika memungkinkan, disarankan untuk memberikan nilai default untuk pengaturan.
Dapatkan nilai yang ditetapkan
Setelah mendefinisikan pengaturan, kita bisa mendapatkan nilai saat ini di server dan klien.
(1) Sisi server
IsettingManager digunakan untuk melakukan pengaturan. Kami dapat menyuntikkan dan menggunakannya di mana saja dalam aplikasi. IsettingManager mendefinisikan banyak metode untuk mendapatkan nilai yang ditetapkan.
Metode yang paling umum digunakan adalah mendapat nilai (atau mendapat yang dapat dipenuhi adalah panggilan asinkron). Ini mengembalikan nilai yang saat ini ditetapkan berdasarkan rentang default, aplikasi, penyewa, dan pengaturan pengguna (seperti yang dijelaskan dalam paragraf sebelum pengaturan rentang). contoh:
// Mendapatkan nilai boolean (panggilan async) var value1 = Await SettingManager.getSettingValueAsync <Bool> ("PasiveUsersCannotLogin"); // Mendapatkan nilai string (panggilan sinkronisasi) var value2 = disionManager.getSettingValue ("smtpserveraddress");GetSettingValue memiliki versi generik dan asinkron, seperti yang ditunjukkan di atas. Ada juga cara untuk mendapatkan daftar pengaturan untuk penyewa atau pengguna tertentu atau semua pengaturan untuk itu.
Karena IsettingManager banyak digunakan, beberapa kelas dasar tertentu (seperti ApplicationService, DomainService, dan ABPController) memiliki properti yang disebut SettingManager. Jika kita mewarisi dari kelas -kelas ini, tidak perlu secara eksplisit menyuntikkannya.
(2) Klien
Jika isVisibletoclients diatur ke true saat mendefinisikan pengaturan, Anda bisa mendapatkan nilai saat ini menggunakan JavaScript pada klien. ABP.Setting namespace mendefinisikan fungsi dan objek yang diperlukan. Contoh:
var currentColor = abp.setting.get ("sitecolorpreference"); Ada juga metode seperti Getint dan Getboolean. Anda dapat menggunakan objek ABP.Setting.values untuk mendapatkan semua nilai. Perhatikan bahwa jika Anda mengubah pengaturan di sisi server, klien tidak akan tahu tentang perubahan ini kecuali halaman disegarkan atau dimuat ulang dengan cara tertentu atau diperbarui secara manual melalui kode.
Ubah Pengaturan
IsettingManager mendefinisikan ChangesettingForApplicationAsync, ChangesTingFortenantAnync dan Metode ChangesTtingettingForuserAsync (dan versi sinkron) untuk mengubah pengaturan aplikasi, penyewa, dan pengguna secara terpisah.
Tentang cache
Cache berada di manajemen pengaturan sisi server, jadi kita tidak boleh secara langsung menggunakan pernyataan pembaruan repositori atau basis data untuk mengubah nilai yang ditetapkan.
Di atas adalah pengantar terperinci untuk konfigurasi dasar manajemen log dan manajemen pengaturan dalam kerangka ABP yang disusun oleh editor saluran teknologi fooxin. Saya berharap akan sangat membantu bagi semua orang untuk mempelajari pengetahuan ini. Untuk konten lebih lanjut, silakan terus perhatikan saluran teknologi fooxin!