J'ai une application Web et j'aimerais auditer la plupart des actions des utilisateurs sur l'application, par exemple la connexion, l'insertion à la base de données, la mise à jour vers la base de données, des exceptions tirées, etc. P>
Un de mes Senios a suggéré d'utiliser une file d'attente pour des performances plus rapides, vous venez donc d'envisager un événement et qu'il est ensuite traité automatiquement sans avoir à attendre qu'il soit traité. P>
Quelles sont vos suggestions? Comment devrais-je les traiter? Enroquez-les n'est pas un problème, mais je ne sais pas comment ils seront traités, alors sans aucun corps n'appellant une méthode. P>
J'utilise C # avec .NET 4.0 P>
5 Réponses :
Je recommanderais simplement un éteint le cadre de journalisation du plateau stable et pris en charge. Avez-vous envisagé un cadre de journalisation, comme Log4net? p>
Vous pouvez écrire un appendeur personnalisé pour vous connecter à MSMQ si vous le souhaitez. P>
Je ne l'ai pas considéré car ce n'est pas une option, je dois fondamentalement créer un cadre d'audit qui sera utilisé pour cette application et tous les futurs
@Ryan ne réinventez pas la roue. Les cadres de journalisation matures comme Nlog ou Log4net peuvent être utilisés comme base pour votre tâche
@Armbrat - merci je regarde aussi log4net, au début, je pensais que tu faisais référence à Log4J et était perplexe parce que c'est pour Java
@RYAN - Aucun homme, log4j est pour Java, log4net est pour .NET. Nlog est bon aussi. Il suffit de choisir ce que vous vous sentez à l'aise. Ma préférence est log4net, mais c'est seulement parce que je l'ai utilisé depuis si longtemps.
@ArmBrat - Désolé, j'ai réalisé plus tard après avoir lu plus à ce sujet, j'ai édité mon message. Merci pour vos commentaires.
Un loger alternatif est appelé TracerX. Il est écrit en C # et rapide et flexible. Étant donné que le code source est disponible, cela signifie que vous pouvez la modifier comme vous le souhaitez répondre à vos besoins. Il est livré avec un spectateur qui permet de filtrer la sortie. P>
https://github.com/markltx/tracerx et article sur la façon de l'utiliser : p>
Deux sujets d'intérêt effectivement: p>
La journalisation asynchrone peut accélérer le traitement lourde 100 fois. Utilisez un fil d'écrivain qui décharge la file d'attente dans l'évier de journal, disons 100ms cependant que le moteur de journalisation doit être démarré et arrêté de manière déterministe afin qu'il puisse rincer les éviers sur l'arrêt d'application. P>
Programmation orientée Aspect Adressé Votre préoccupation transversale - Les appels d'audit / journal doivent être invoqués dans l'opération souhaitée prologues / épilogues - regardez POSTSHARP projet. P>
Je travaille sur une bibliothèque qui peut probablement aider. p>
audit.net et ses extensions pour vérifier différents systèmes ( wcf , MVC , webapi , EF ) et stockez les journaux dans différents stockages de données ( SQL , mongodb , DocumentDB , Fichier, EventLog) vous donnera la flexibilité pour configurer que em> voulez-vous auditer et où em> Vous souhaitez stocker les journaux d'audit. P>
J'aime ce cadre mais je n'arrête pas d'obtenir où il se connecte. J'utilise l'audit.net et j'ai décoré mon action avec l'attribut AuditAPI. Où puis-je trouver le journal? @ theprat000
Vous décidez de stocker / envoyer les journaux, via fournisseurs de données i>, jetez un coup d'œil à la documentation ici . Par défaut, si aucun fournisseur de données n'est configuré, il se connectera aux fichiers JSON du système de fichiers sur le dossier d'exécution. Vous pouvez le configurer via audit.core.configuration.setup (). Utilexxxx (...) code>
Travaillé parfaitement! Cependant, il enregistre également des mots de passe dans la chaîne simple. Comment cela peut-il être configuré pour masquer les données sensibles?
Une option est de configurer un Action personnalisée qui exécute avant l'économie d'événement, alors Vous pouvez modifier l'événement final à enregistrer. Une autre option consiste à créer un fournisseur de données personnalisé et avoir la logique de masque là-bas.
Exemple super réduit d'une action d'audit sur l'épargne des événements: audit.core.configuration.addCustomAction (actiontype.Onevents AVing, e => {e.event.getwebapiaudittacer (). Actionparamètres ["Mot de passe"] = "** ** ** ";}); code>
Cela a travaillé comme prévu. Merci beaucoup.
Hi @ thepriat000 J'utilise le projet Core ASP.NET et je veux vous connecter SQL. S'il vous plaît laissez-moi savoir, quels projets dois-je ajouter dans mes projets? Ou puis-je l'utiliser directement? Si oui, dans le fichier programme.cs ou startup.cs? Ou ailleurs?
Vous pouvez faire référence aux packages Audit. Webapi.core code>
pour générer les événements d'audit pour asp.net core et AUDIT.NET.SQLSERVER CODE>
Pour stocker les événements sur un serveur SQL.
Dois-je créer un propre configurateur et fournisseurs? Ou peut-il diriger des outils dans construits?
@ thepriat000, j'ai besoin d'auditer la procédure stockée des modifications DML. J'ai essayé via l'extension de base d'audit.net ef, mais il semble qu'il ne semble pas être impossible depuis l'interception de l'interception de la bibliothèque de la bibliothèque de la bibliothèque d'audit.Net, la méthode SAVECHANGES n'est pas appelée lorsque nous exécutons la procédure stockée à l'aide de EF Core. Je dois enregistrer chaque modification de la base de données via la procédure CUD / stockée. De plus, je dois auditer les instructions ADO.NET DML. J'utilise .NET CORE et SQL Server. Pouvez-vous suggérer une approche à l'aide de la bibliothèque d'audit.net ou de toute autre bibliothèque? Ce sera très utile.
J'ai également soulevé une question distincte pour cela. S'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails.
(peu tard sur la réponse, ce post montre haut dans Google. Je pensais donc que cela vaut la peine d'être examinée par certaines options) p>
Si vous cherchez à vérifier réellement. (À cet égard, je veux enregistrer qu'une action a eu lieu, qui l'a fait et quand et que, pour que ce journal auditable puisse être utilisé comme preuve à un auditeur externe) P>
( Débogoux VS Audit Logging ) p>
Si tel est le cas, vous pouvez envisager des options, telles que: p>
Les deux sont assez cool, car ils vous permettent d'apporter votre propre datastore p>
Le design ici (qui peut avoir une incidence sur votre architecture pour embrasser les événements) est que les événements sont immuables et si vous les stockez, vous avez un magasin auditable de choses qui se sont produites dans votre système P>
note em> Cela ne cherche pas à résoudre la question ci-dessus, mais cela résout la vérification, donc je l'ai mentionné p>
Vous devez confirmer que la bibliothèque de journalisation si elle ne parvient pas à ajouter un journal d'audit, il lancera une exception. P>
Si cela ne fait pas cela, vous manquerez des journaux auditables, qui ne vous permettront alors de créer de confiance avec vos auditeurs p>
Note latérale 1 - Avec les options 1 et 3, vous devrez peut-être vous assurer que le journal est écrit dans la même transaction que votre magasin de données primaire. S'assurer que toutes les informations sont acides. (Ceci est similaire à la question des personnes avec la publication d'un événement en dehors de la transaction de base de données) P>
Note latérale 2 - Que les journaux d'audit devraient pouvoir identifier qui a fait quoi, afin que vous puissiez / trois devoir crypter le magasin de données, ils finissent par se retrouver. P>
votes
1. Utilisation d'une bibliothèque d'audit h3>
2. Événementsourcing h3>
3. Logging Library h3>
Avez-vous vraiment besoin de fonctionnalités d'audit ou juste de vous connecter?
@CKeller Je dois enregistrer les choses dans un fichier et j'ai également besoin de les stocker dans la base de données. Je vais connecter ce qui a été changé, ce qui a été inséré, quand une exception a été tirée, etc.