none
Centraliser les logs en .NET RRS feed

  • Question

  • Bonjour,

    est - il possible sur C#.NET (full microsoft) de centraliser les logs ie écrire une fonction qui attrapera toutes les erreurs de l'application  et donc contiendra l'unique instruction pour ecrire sur le log.txt ?

    C'est possible avec SPRING.NET avec les AOP (advice )mais mon DP ne veut pas de spring.

     

    exemple : 

    public class LoggingThrowsAdvice : IThrowsAdvice
        {
            public static log4net.ILog filelogger = LogManager.GetLogger("StoresServiceLog");
    
            private string innerMsg;
            /// <summary>
            /// Toutes les erreurs de l'appli seront attrape ici
            /// </summary>
            /// <param name="ex"></param>
            public void AfterThrowing(Exception ex)
            {
    
                if (ex.InnerException != null)
                {
                    innerMsg = ex.InnerException.Message;
                    if (ex.InnerException.InnerException != null)
                        innerMsg = innerMsg + string.Format("\n {0}", ex.InnerException.InnerException.Message);
                }
                else
                    innerMsg = string.Format("\n {0}", ex.Message);
    
                filelogger.ErrorFormat(
                    String.Format("Advised method threw this exception :  \n {0} \n -- {1}  \n -- {2}", innerMsg, ex.Message, ex.StackTrace));
            }
        }
    


     

    mercredi 25 janvier 2012 21:45

Réponses

Toutes les réponses

  • Bonjour,

    Il faut faire un try/catch dans le Main() de votre application :

    public static void Main()
    {
       try
       {
           // Démarrer l'application
       }
       catch(Exception e)
       {
           Log("Oups....");
       }
        
    }
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 25 janvier 2012 23:51
    Modérateur
  • Merci

    Supposons que j'ai plusieurs services et je voudrais centraliser les logs de mes services pour la maintenance.

    Je ne pourrais pas dire a tous ceux qui veulent les appeler de mettre des try catch et en plus moi , je ne saurais pas si le service a planter ou pas

    jeudi 26 janvier 2012 08:14
  • Bonjour,

    Le terme "service" est vague ! Qu'est ce que pour vous un service ? Un service Windows ? Un service WCF ? Comment sont héberger vos services ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    jeudi 26 janvier 2012 09:38
    Modérateur
  • Des services WCF , dont ceux dédié aux traitements Batch sont hebergés sur un service windows et ceux dédié aux utilisateur web externe sont hebegés  sur IIS.

     

    Je pense que le mode d’hébergement ne dois pas poser problème car, selon moi ,  un  service wcf est fait pour pouvoir être hébergé n’importe où.

     

    C’est ce qui m’a motiver pour faire du WCF

     


    • Modifié gophette jeudi 26 janvier 2012 09:46
    jeudi 26 janvier 2012 09:45
  • Bonjour,

    Vous avez deux solutions :

    Pour récupérer les exceptions qui sont déclenchés dans les services WCF vous devez utiliser l'interface IErrorHandler (cf. http://www.neovolve.com/post/2008/04/07/implementing-ierrorhandler.aspx).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse gophette jeudi 26 janvier 2012 17:08
    jeudi 26 janvier 2012 10:21
    Modérateur
  • Merci pour cette approche.

    J’ai un autre service non WCF (juste un projet class library), comment centraliser les logs pour ce service ?

    jeudi 26 janvier 2012 17:10
  • Bonjour,

    Par service "non-WCF" je comprends que cela correspond à une classe simple.
    Dans ce cas, vous n'aurez pas le choix que d'attraper l'erreur via un try/catch ou Application_Error() dans le Global.asax d'une application ASP .NET

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    jeudi 26 janvier 2012 18:24
    Modérateur