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 :

TextWriter qui écrit n'importe quoi


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut TextWriter qui écrit n'importe quoi
    Hello

    J'ai une toute petite classe que j'utilise pour débugguer un site en prod qui n'est pas hébergé chez moi et dont je n'ai pas accès aux log IIS.

    C'est juste une petite classe qui me permet de rajouter des lignes dans un fichiers sur le serveur, fichier que je peux ensuite récupérer en FTP

    Voilà la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;
     
    /// <summary>
    /// Description résumée de Log
    /// </summary>
    public class Log
    {
        public static void Append(string line)
        {
            TextWriter tw = new StreamWriter(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"log\log.txt"), true);
     
            tw.WriteLine(DateTime.Now.ToString("[yyyy-MM-dd hh:mm:ss] " + line));
            //tw.Flush();
            tw.Close();
            tw.Dispose();
        }
    }
    Je sais, je pourrait faire mieux, mais pour faire du debug temporairement, ca suffit largement ;D

    Seulement, elle buggue et je ne sais pas pourquoi :

    Quand je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.Append("Paiement");
    dans une portion de code quelconque, j'ai une ligne bouffée qui apparait.

    Exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [2009-03-03 06:03:11] Paie3en
    [2009-03-03 05:50:09] Paie50en
    [2009-03-03 05:59:24] Paie59en
    Et ce avec ou sans le flush...

    Si quelqu'un peut m'expliquer ca m'arrangerait beaucoup

    Merci d'avance

    PS : Je doit pas savoir rechercher sur google, parce que j'ai pas trouvé de suhets similaires, alors que j'ai le même bug sur 2 serveurs différents.

  2. #2
    Expert éminent
    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
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Ca veut dire quoi:
    Citation Envoyé par mioux Voir le message
    j'ai une ligne bouffée qui apparait
    A+

  3. #3
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Ben qu'au lieu de m'affichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [2009-03-03 06:03:11] Paiement
    il m'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [2009-03-03 06:03:11] Paie3en
    Il manque le t (mais le retour à la ligne qui suit y est), et j'ai un 3 à la place d'un m (ou dans les 2 exemples suiviant, j'ai 50 et 59 à la place du m)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Le problème est sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tw.WriteLine(DateTime.Now.ToString("[yyyy-MM-dd hh:mm:ss] " + line));
    Par exemple, si line contient "Paiement", ça revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tw.WriteLine(DateTime.Now.ToString("[yyyy-MM-dd hh:mm:ss] Paiement"));
    Donc "Paiement" fait partie de la chaine de format en paramètre de ToString...
    Les caractères 'P', 'a', 'i', 'e', et 'n' n'ont pas de sens particulier pour un format de date, ils sont donc affichés normalement. Le caractère 'm' signifie "minutes", donc c'est remplacé par le nombre de minutes. Et le caractère 't' correspond au désignateur AM/PM, qui n'existe pas en français, il est donc remplacé par rien du tout.

    Donc au final le TextWriter fait exactement ce qu'il est supposé faire

    Modifie ton code comme ça, ça devrait régler le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tw.WriteLine(DateTime.Now.ToString("[yyyy-MM-dd hh:mm:ss] ") + line);
    Comme quoi, une parenthèse mal placée peut avoir des conséquences dramatiques

  5. #5
    Expert éminent
    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
    Points : 9 512
    Points
    9 512
    Par défaut
    Yo,

    Ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tw.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), line));
    A+

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Effectivement c'est un peu plus propre... mais on peut faire plus simple, WriteLine gère déjà le format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tw.WriteLine("[{0}] {1}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), line);

  7. #7
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Rhaaa mais quel boulet !!!

    J'ai fais ca en 2 temps 3 mouvements, ça m'apprendra à recontrôler !

    Merci en tout cas (et oui je savait que le code était pas propre, j'ai fais vite pour débugguer un serveur en production sur lequel je n'ai pas d'accès comme je l'ai déjà expliqué )

    Comme quoi aussi, 2 paires d'yeux dès fois ça sert.

  8. #8
    Expert éminent
    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
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par tomlev Voir le message
    WriteLine gère déjà le format
    Jamais fait gaffe. Merci, ça va encore alléger mon code

    A+

    PS: on oublie pas le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Printf qui affiche n'importe quoi
    Par med1001 dans le forum C
    Réponses: 2
    Dernier message: 13/04/2012, 05h11
  2. Compte admin qui me fait n'importe quoi.
    Par 6bil1 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 02/07/2009, 14h33
  3. Calcul automatique qui fait n'importe quoi
    Par renaud26 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/03/2009, 16h14
  4. C'est en faisant n'importe quoi qu'on devient n'importe qui
    Par elitost dans le forum La taverne du Club : Humour et divers
    Réponses: 8
    Dernier message: 04/10/2007, 15h20
  5. Programme qui m'affiche n'importe quoi
    Par Gryzzly dans le forum C
    Réponses: 8
    Dernier message: 02/01/2006, 20h25

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