IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Mise en oeuvre de Log4Net sous C# 3.5


Sujet :

ASP.NET

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut Mise en oeuvre de Log4Net sous C# 3.5
    Salut,

    J'ai téléchargé Log4Net et j'ai ajouté la référence à mon projet.
    http://logging.apache.org


    J'aimerais faire des Logs XML avec une page XSLT pour que mes utilisateurs puissent consulter les évènements dans une IFrame.

    Les exemple qui se trouvent sur le Site de Log4Net dont en C# 1.0.

    Aurriez-vous quelque chose de plus "frais" ?

    D'avance merci

    Laurent Jordi

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Une classe statique accessible dans toute ta solution qui log en base grâce à Linq ( de préférence écrire en base car c'est beaucoup plus rapide que d'écrire dans un fichier). Excel pour se connecter à la base et exploiter les log (faire des graphs, des tableaux croisés, faire un peu de "data mining").
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LogManager.LogWarning("Mon alerte", monObjetATraiter);
    LogManager.LogInfo("Mon info", monObjetATraiter);
    LogManager.LogError("Mon erreur", monObjetATraiter);
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut Du coup
    Salut,

    Merci pour ta réponse. Le problème du log en base c'est qu'un planton de la base ne peut être loggué, dans ce cas, je logguerais dans le journal windows.

    Etant donné qu'il s'agit d'un serveur web multi clients, j'ai besoin de spécifier une chaine de caractères dans un champ. Elle correspond à l'ApplicationName du Membership.

    Je pourrais ainsi filtrer les logs pour chaque client d'après toi, c'est possible ?

    D'avance merci

    Laurent

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    Le problème du log en base c'est qu'un planton de la base ne peut être loggué, dans ce cas, je logguerais dans le journal windows.
    Désolé, je comprend pas "planton de la base".

    Une de mes applications se trouve sur 2 machines et une 12aine de sites web. Mon LogManager récupère aussi bien le nom de la machine que le domaine du site web. On peut récupérer tout ce qu'on veut. Tu peux sérializer et envoyer en base tous les objets dont tu as besoin. Le "monObjetATraiter" peut être un objet métier sur lequel tu mets toutes les informations utiles.

    Mon LogManager tient compte de paramètres dans la configuration pour logguer ou pas lors de l'appel à certaines méthodes. Il n'est pas forcement utile (c'est même nocif pour les perfs de tout logguer) de logguer des infos en mode production. Tu peux faire facilement un test dans la méthode LogManager.LogInfo pour ne logguer que si ton application est en mode débug (a définir dans le web.config par exemple).

    Enfin, il n'y a de limites que ton imagination.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut
    Planton de la base de données...

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Oui, ça veut dire quoi?
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Je rejoins Immobilis sur sa proposition à savoir une classe statique que tu puisses appeler dans n'importe quelle appli. Et on peut encore pousser plus loin.

    Planton, synonyme de plantin qui voudrait dire "accident intervenu sur une machine qui vient de planter.". Jamais lu ni le premier terme, ni le second de toute ma vie. C'est Québécois, ou belge ?

  8. #8
    CUCARACHA
    Invité(e)
    Par défaut
    Non c'est niçois

    Bon, trêve de plaisanterie...

    J'ai bien compris que l'on pouvait stocker des objets métier mais, comme je dois systématiquement filtrer par client, j'ai besoin d'avoir un champ différenciateur au niveau de la table sans quoi j'ai peur que les performances n'en souffre car (sauf erreur de ma part), une requête linq impliquerait que je charge en mémoire la totalité du log avant de faire ma requête.

    Je vais explorer plus avant pour voir si j'arrive à trouver une solution, en cas, je créerais une classe dérivée que je reverserais à la communauté.

    Pour information, mon CMS gère tous les domaines dans le même site racine, c'est pourquoi j'ai besoin d'un tel dispositif.

    Bonne journée

    Laurent

  9. #9
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Si tu regardes les exemples log4net pour SQL Server (ou autre sgbd), tu as le script pour créer cette table :

    CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
    )
    Rien ne t'empêche de rajouter des champs du type "Identifiant Server", "Identifiant Client". Voir d'utiliser plusieurs appender : un pour tel type de message à stocker , ou un pour tel type de client ou serveur.

    Bref, il te faut définir clairement toutes les infos que tu as besoin de stocker. Ensuite log4net est très souple pour te permettre de tout insérer en base (ou autre source de stockage si tu veux utiliser les Event log par exemple).

    En espérant t'avoir aidé.

  10. #10
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    Bien sûr que ça m'aide, je n'avais pas compris que l'on pouvait modifier la structure de données.

    Dans ces conditions c'est parfait.

    Merci

    Laurent

  11. #11
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    une requête linq impliquerait que je charge en mémoire la totalité du log avant de faire ma requête.
    Comment ça?
    "Winter is coming" (ma nouvelle page d'accueil)

  12. #12
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Peut être entend-il par là : charger tous les objets dans une collection pour faire une requête Linq dessus..... au lieu d'utiliser Linq To SQL peut être ?

    Surement une phrase écrite trop vite...

  13. #13
    CUCARACHA
    Invité(e)
    Par défaut
    J'avais mal compris ta suggestion :
    Si l'objet métier est une chaine de caractères sérialisée dans un champ texte, je ne vois pas comment faire pour faire une requête linq en direct la dedans.

    Je n'utilise pas Linq to SQL, uniquement to entities et to object, comme le log4net semble ne pas être tout à fait nativement compatible avec linq to entities... Je pensais avoir à tout charger pour pouvoir filtrer mais je me trompais.

    La consultation est totalement indépendante de l'alimentation.

    ++

    Laurent

  14. #14
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    Si l'objet métier est une chaine de caractères sérialisée dans un champ texte, je ne vois pas comment faire pour faire une requête linq en direct la dedans.
    Ah, ok. En fait, les propriétés de l'objet métier sont à "mapper" avec les champs de la base. Linq to Entities marche aussi. SQL n'est qu'un moyen de stocker l'info.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  15. #15
    CUCARACHA
    Invité(e)
    Par défaut Merci
    Salut,

    Merci pour ton aide, ça roule...

    ++

    Laurent

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/06/2014, 19h32
  2. Réponses: 1
    Dernier message: 24/03/2008, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo