ABP est un cadre de développement Web basé sur ASP.NET. Ses paramètres de journal et de cadre sont également relativement terminés. Ici, l'éditeur de la nouvelle chaîne technologique introduira en détail la configuration de base de la gestion des journaux et de la gestion des réglages dans le cadre ABP. Les amis dans le besoin peuvent se référer attentivement à cela!
Gestion des journaux
Côté serveur (côté serveur)
ASP.NET BULERPLAY utilise l'outil de journalisation de l'installation de journalisation de Castle Windsor et peut utiliser différentes bibliothèques de classes de journaux, telles que: log4net, nlog, seleLog ... et ainsi de suite. Pour toutes les bibliothèques de classe de journaux, Castle fournit une interface générale pour l'implémenter. Nous pouvons facilement gérer diverses bibliothèques de journaux spéciales, et il est facile de remplacer les composants du journal lorsque l'entreprise en a besoin.
Note du traducteur: What Is Castle: Castle est un projet open source pour la plate-forme .NET, du framework d'accès aux données ORM aux conteneurs IOC, au framework MVC et AOP sur la couche Web, il comprend essentiellement tout dans l'ensemble du processus de développement. Le conteneur IOC de ASP.NET BULERPLAY est implémenté via Castle.
Log4NET est le composant de bibliothèque de journaux le plus populaire sous ASP.NET. Le modèle ASP.NET BULERPLAY utilise également le composant Log4Net Log Library. Cependant, nous implémentons l'injection de dépendance log4NET via une seule ligne de code clé (spécifiquement expliqué dans le fichier de configuration ci-dessous). Par conséquent, il est également facile de le remplacer par votre propre composant de journal.
Obtenir un bûcheron
Quel que soit le composant Log Library que vous choisissez, il est le même pour la connexion via le code. (La plainte ici, l'interface universelle d'Ilogger de Castle est vraiment géniale).
Passons au sujet: (Note du traducteur: Le code suivant est l'analyse du code source Castle.Core et la mise en œuvre du framework ABP)
1. Tout d'abord, nous devons d'abord faire face à la journalisation des objets enregistreur. Le framework ASP.NET BULERPLAY utilise la technologie d'injection de dépendance à l'injection de dépendance, et nous pouvons facilement utiliser l'injection de dépendance pour générer l'enregistreur d'objets en journalisation.
Ensuite, jetons un coup d'œil à la façon dont ASP.NET BULERPLAY implémente la fonction de journalisation:
Utilisation de Castle.Core.logging; // 1: l'espace de noms pour l'importation du journal, château.core.loggingpublic class taskAppService: itaskAppService {// 2: Obtenez l'objet logger via l'injection de dépendance. Ici, nous définissons d'abord un enregistreur de propriété publique de type Ilogger, qui est l'objet que nous utilisons pour enregistrer les journaux. Après avoir créé l'objet TaskAppService (la tâche définie dans notre application), elle est implémentée par injection d'attribut. Public Ilogger Logger {get; ensemble; } public taskAppService () {// 3: S'il n'y a pas de journaliste, renvoyez le journaliste à une instance vide et n'écrivez pas le journal. C'est le meilleur moyen d'implémenter l'injection de dépendance, // Si vous ne définissez pas cette bûcheron vide, une exception sera générée lorsque nous obtiendrons la référence de l'objet et l'instancions. // Cela garantit que l'objet n'est pas vide. Ainsi, en d'autres termes, sans configurer un enregistreur, le journal ne sera pas enregistré et un objet nul sera renvoyé. // L'objet Nulllogger n'est en fait rien, vide. Ce n'est qu'en faisant cela que nous pouvons nous assurer que les classes que nous définissons fonctionnent normalement lorsqu'elles sont instanciées. Logger = nulllogger.instance; } public void createTask (CreateTaskInput entrée) {// 4: écrivez dans logger.info ("Création d'une nouvelle tâche avec description:" + input.description); // TODO: Enregistrer la tâche dans la base de données ...}} La copie de code est la suivante:Info 2014-07-13 13: 40: 23,360 [8] Simpletasksystem.tasks.taskAppService - Création d'une nouvelle tâche avec description: N'oubliez pas de boire du lait avant de dormir!
Après avoir écrit dans le journal, nous pouvons afficher le fichier journal, tout comme le format suivant:
Utilisation de Logger via la classe de baseLe framework ASP.NET BULERPLAY fournit les classes de base des contrôleurs MVC, des contrôleurs API Web et des classes de services d'application (les contrôleurs et les services d'application que vous définissez doivent hériter des classes de base de ASP.NET Playplate.
classe publique HomeController: SimpletAskSystemControllerBase {public ActionResult index () {logger.debug ("Un exemple de message de journal ..."); return View (); }}Description: SimpletAskSystemControllerBase Ce contrôleur de classe de base est le contrôleur de classe de base que nous nous définissons, et il doit hériter d'AbpController.
De cette façon, l'enregistreur peut fonctionner normalement. Bien sûr, vous pouvez également implémenter votre propre classe de base, afin que vous ne puissiez plus utiliser l'injection de dépendance.
Configuration
Si vous générez votre projet via des modèles ASP.NET BULERPLATS sur le site officiel, toutes les configurations de Log4NET sont générées automatiquement.
Le format de configuration par défaut est le suivant:
• Niveau de journal: niveau d'enregistrement du journal, 5 débogage, informations, avertissement, erreur ou mortel.
• Date et heure: heure de journalisation.
• Numéro de thread: le numéro de thread lorsque chaque ligne de journal est écrite.
• Nom du journal: le nom de l'enregistreur, généralement le nom de classe.
• Texte du journal: le contenu du journal que vous avez écrit.
Fichier de configuration: log4net.config est généralement situé dans le répertoire Web du projet.
<? xml version = "1.0" encoding = "utf-8"?> <log4net> <appender name = "rollingFileAppender" type = "log4net.appender.rollingFileAppender"> <file value = "logsstyle.txt" /> <appendtofile value = "true" /> <rollingstyle value = "size" /> <maxsizerol /> <maximumFileSize value = "10000kb" /> <staticLogFileName value = "true" /> <Layout type = "log4net.layout.patternlayout"> <conversionpattern value = "% -% newline"% -5.5Thread]% -40.40Logger -% newline "/> </ Layout> ref = "rollingFileAppender" /> <niveau valeur = "debug" /> </ root> <logger name = "nhibernate"> <niveau valeur = "warn" /> </ logger> </ log4net>
Log4Net est un composant de bibliothèque de journaux très puissant et facile à utiliser. Vous pouvez écrire divers journaux, tels que l'écriture sur des fichiers TXT, l'écriture dans les bases de données, etc. Vous pouvez définir le niveau de journal minimum, tout comme la configuration ci-dessus pour Nhibernate. Différents bûcheurs d'écriture écrivent différents journaux, etc.
Pour une utilisation spécifique, veuillez vous référer à: http://logging.apache.org/log4net/release/config-examples.html
Enfin, dans le fichier global.asax du projet, définissez le fichier de configuration log4net:
classe publique mvcapplication: abpwebApplication {Protected Override void Application_Start (Sender d'objet, EventArgs e) {iocmanager.instance.iocContainer.addfactility <loggingfactility> (f => f.uselog4net (). avecconfig ("log4net.config")); Base.Application_Start (Sender, E); }}Quelques lignes d'appel de code LOG4NET, le composant de journalisation. La bibliothèque log4net du projet se trouve dans le package NuGet. Vous pouvez également le modifier par d'autres bibliothèques de composants de journal, mais le code n'a pas besoin d'être modifié. Parce que, notre cadre implémente l'enregistreur par injection de dépendance!
Côté client (client)
Enfin, ce qui est encore plus étonnant, c'est que vous pouvez également appeler l'enregistreur du côté client. Côté client, le framework ASP.NET BULERPLAY a une API JavaScript JavaScript correspondante, ce qui signifie que vous pouvez enregistrer les journaux du navigateur, et le code d'implémentation est le suivant:
abp.log.warn («Un exemple de message de journal ...»);
Attaché: API JavaScript client. Ce que vous devez expliquer ici, c'est que vous pouvez utiliser Console.log pour sortir des journaux sur le client, mais cette API ne prend pas nécessairement en charge tous les navigateurs et peut provoquer des exceptions à votre script. Vous pouvez utiliser notre API, la nôtre est sûre et vous pouvez même surcharger ou étendre ces API.
abp.log.debug ('...'); abp.log.info ('...'); abp.log.warn ('...'); abp.log.error ('...'); abp.log.fatal ('...'); abp.log.fatal ('...');Gestion des paramètres
introduire
Chaque application doit stocker certains paramètres et les utiliser quelque part dans l'application. Le framework ABP fournit une infrastructure puissante que nous pouvons définir sur le serveur ou le client pour stocker / obtenir des configurations d'application, de locataire et de niveau utilisateur.
Les paramètres sont généralement stockés dans une base de données (ou une autre source), représentée par la structure correspondant à la chaîne de valeurs de nom. Nous pouvons convertir les valeurs non corrigées en valeurs de chaîne pour le stockage.
Remarque: à propos de l'interface Isettingstore
Afin d'utiliser la gestion des paramètres, l'interface IsettingStore doit être implémentée. Vous pouvez l'implémenter à votre manière, et il existe des implémentations complètes dans le projet Module-Zero à laquelle vous référer.
Définir les paramètres
Vous devez définir les paramètres avant de les utiliser. Le cadre ABP est une conception modulaire, donc différents modules peuvent avoir des paramètres différents. Pour définir les paramètres du module, chaque module doit créer une classe dérivée héritée de SettingProvider. L'exemple du fournisseur de configuration est le suivant:
classe publique MySettingProvider: SettingProvider {public override ienumerable <SettingDefinition> getSettingDefinitions (settingDefinitionProviderContext context) {return new [] {new SettingDefinition ("SmtPServerAddress", "127.0.0.1"), New SettingDefinition ("passiveUsersCannotLoGin", "True" SettingScopes.Application | SettingScopes.tenant), new SettingDefinition ("SiteColorPreference", "Red", Scopes: SettingScopes.User, IsVisiBleToClients: true)}; }}La méthode GetSettingDefinitions renvoie l'objet SettingDefinition. Le constructeur de la classe SettingDefinition a les paramètres suivants:
• Nom (requis): doit avoir un nom unique sur l'ensemble du système. Une meilleure façon consiste à définir les constantes de chaîne pour définir le nom.
• Valeur par défaut: définit une valeur par défaut. Cette valeur peut être nul ou une chaîne vide.
• Scopes: définit la portée du paramètre (voir ci-dessous).
• Nom d'affichage: une chaîne localisable pour afficher plus tard le nom défini dans l'interface utilisateur.
• Description: une chaîne localisable pour afficher plus tard la description des paramètres dans l'interface utilisateur.
• Groupe: peut être utilisé pour configurer des groupes. Ce n'est que pour l'interface utilisateur et n'est pas pour définir la gestion.
• IsVisibletOclices: Le réglage sur true rendra les paramètres disponibles sur le client.
Après avoir créé le paramètres de set
Configuration.settings.providers.add <mySettingProvider> (); Le fournisseur de réglage enregistre automatiquement l'injection de dépendance. Par conséquent, le fournisseur de configuration peut injecter toutes les dépendances (telles qu'un référentiel) pour générer une autre source de la définition de configuration.
Définir la plage
Il y a trois paramètres (ou niveaux) définis dans l'énumération de SettingScopes:
• Application: les paramètres à l'échelle de l'application sont utilisés pour les paramètres indépendants de l'utilisateur / locataire. Par exemple, nous pouvons définir un paramètre appelé "smtpServerAddress" qui obtient l'adresse IP du serveur lors de l'envoi d'un e-mail. Si ce paramètre a une seule valeur (non modifiée en fonction de l'utilisateur), nous pouvons le définir comme portée d'application.
• Locataire: si l'application est multi-locataire, nous pouvons définir des paramètres spécifiques au locataire.
• Utilisateur: Nous pouvons utiliser les paramètres à l'échelle de l'utilisateur pour stocker / obtenir des valeurs définies pour chaque utilisateur.
L'énuo de paramètres a une propriété Flags, nous pouvons donc définir un paramètre avec plusieurs lunettes.
La gamme des paramètres est hiérarchique. Par exemple, si nous définissons la plage de réglage de "Application | locataire | utilisateur" et essayons d'obtenir la valeur de l'ensemble actuellement;
• Nous obtenons la valeur d'un utilisateur spécifique s'il définit (réécrit) l'utilisateur.
• Sinon, nous obtenons la valeur spécifique du locataire si elle définit (réécriture) le locataire.
• Sinon, nous obtenons la valeur de l'application si elle définit l'application.
• Sinon, nous obtenons la valeur par défaut.
La valeur par défaut peut être nul ou une chaîne vide. Si possible, il est recommandé de fournir une valeur par défaut pour les paramètres.
Obtenez la valeur définie
Après avoir défini les paramètres, nous pouvons obtenir sa valeur actuelle sur le serveur et le client.
(1) côté serveur
ISettingManager est utilisé pour effectuer des paramètres. Nous pouvons l'injecter et l'utiliser n'importe où dans l'application. ISettingManager définit de nombreuses méthodes pour obtenir des valeurs définies.
La méthode la plus couramment utilisée est GetSettingValue (ou GetSettingValueAsync est un appel asynchrone). Il renvoie la valeur actuellement définie en fonction de la plage par défaut, application, locataire et paramètres utilisateur (comme décrit dans le paragraphe avant la plage de définition). exemple:
// Obtenir une valeur booléenne (Async Call) Var Value1 = Await SettingManager.getSettingValueAsync <bool> ("PASSIVEUSERSCANNOTLOGIN"); // Get a une valeur de chaîne (Sync Call) Var Value2 = SettingManager.GetTettingValue ("SmtPServerAddress");GetSettingValue a des versions génériques et asynchrones, comme indiqué ci-dessus. Il existe également des moyens d'obtenir une liste de paramètres pour un locataire ou un utilisateur spécifique ou tous les paramètres.
Étant donné que iSettingManager est largement utilisé, certaines classes de base spécifiques (telles que Applications Service, DomainService et AbpController) ont une propriété appelée SettingManager. Si nous héritons de ces classes, il n'est pas nécessaire de l'injecter explicitement.
(2) Client
Si IsVisibletOclices est défini sur true lors de la définition des paramètres, vous pouvez obtenir sa valeur actuelle à l'aide de JavaScript sur le client. ABP.setting L'espace de noms définit les fonctions et objets requis. Exemple:
var currentColor = abp.setting.get ("SiteColorPreference"); Il existe également des méthodes telles que GetInt et GetBoolean. Vous pouvez utiliser l'objet ABP.Setting.Values pour obtenir toutes les valeurs. Notez que si vous modifiez les paramètres du côté serveur, le client ne connaît pas cette modification à moins que la page ne soit actualisée ou rechargée d'une manière ou d'une autre ou mise à jour manuellement via le code.
Modifier les paramètres
ISettingManager définit les modifications changeants pour laapplicationaSync, changettingFortenantAsync et changeSettingForUserAsync (et la version synchrone) pour modifier séparément les paramètres de l'application, du locataire et de l'utilisateur.
À propos du cache
Le cache est dans la gestion des paramètres côté serveur, nous ne devons donc pas utiliser directement l'instruction du référentiel ou de la base de données pour modifier la valeur définie.
Ce qui précède est une introduction détaillée à la configuration de base de la gestion des journaux et de la gestion des réglages dans le framework ABP compilé par l'éditeur de Fooxin Technology Channel. J'espère qu'il sera utile pour tout le monde d'apprendre ces connaissances. Pour plus de contenu, veuillez continuer à faire attention à Fooxin Technology Channel!