none
changer dynamiquement l'adresse du File path dans Enterprise Library c# RRS feed

  • Discussion générale

  • Bonjour,

    je suis en stage dans une entreprise et on m'a demandé de trouver une solution pour changer l'adresse ou les logs seront enregistrés durant l'exécution du programme selon le mode RECETTE/PRODUCTION.

    ça fait deux jours que je cherche et je n'ai pas trouvé

    la question:

    Comment changer l'adresse du file path des logs durant le Run Time sachant que l'adresse par défaut est mise au début par le baie de la configuration à partir du framework  Enterprise Library 5 ?

    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
            <listeners>
                <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    source="Enterprise Library Logging" formatter="Text Formatter"
                    log="" machineName="." traceOutputOptions="None" />
                <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\logggg.log"
                    formatter="Text Formatter" traceOutputOptions="None" />
                <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\trace.log"
                    formatter="Text Formatter" />
            </listeners>

    j'ai essayé avec ce code mais ça ne marche pas !!:

    string logFilePath = @"C:\Documents and Settings\kbaiche\test\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
    
                ConfigurationFileMap objConfigPath = new ConfigurationFileMap();
    
                // App config file path.  
                string appPath = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
                objConfigPath.MachineConfigFilename = appPath;
    
                Configuration entLibConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
                LoggingSettings loggingSettings = (LoggingSettings)entLibConfig.GetSection(LoggingSettings.SectionName);
    
                TraceListenerData traceListenerData = loggingSettings.TraceListeners.Get("Flat File Trace Listener");
                FlatFileTraceListenerData objFlatFileTraceListenerData = traceListenerData as FlatFileTraceListenerData;
    
                objFlatFileTraceListenerData.FileName = logFilePath;
    
                entLibConfig.Save();  


    Merci d'avance pour vos réponses

    pour plus de détail je serai là


    • Modifié Zero0o jeudi 30 mai 2013 13:34
    • Type modifié Aurel Bera lundi 3 juin 2013 10:58 Discussion
    jeudi 30 mai 2013 13:31

Toutes les réponses

  • Bonjour,

    Est-ce que vous utilisez Windows XP ?

    Quel Framework utilisez-vous ?

    Quel version d'Entreprise Library utilisez-vous (4 ou 5 ou 6) ?


    Apprenez à développer en C#

    fred

    jeudi 30 mai 2013 14:39
  • Bonjour,

    Merci pour votre réponse :)

    oui j'utilise:  Windows xp, Microsoft Windows Visual Studio 2010 et Enterprise Library 5.0

    vendredi 31 mai 2013 13:09
  • Bonjour,

    Merci pour votre réponse.

    Oui j'utilse:

    Systeme: Windows Xp

    Framework: Microsoft Visual Studio 2010

    Enterprise Library 5.0
    vendredi 31 mai 2013 13:14
  • Bonjour

    J'ai restaure votre message marquée automatique par le système comme Spam.
    Si vous voulez vraiment l'effacer, effacez-le de nouveau avec un message appropriée.

    Cordialement, 


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 31 mai 2013 13:20
  • Merci
    vendredi 31 mai 2013 13:28
  • J’utilise déjà un filtre par sévérit:

     
    //premier message doit etre afficher dans c:\Infos\MyLog.log
    Logger.Write(new LogEntry { Message = "teste de log enterprise library!! 1", Severity = TraceEventType.Information });
    
    
    //deuxième message doit etre afficher dans c:\Errors\MyLog.log
    Logger.Write(new LogEntry { Message = "teste de log enterprise library!! 2", Severity = TraceEventType.Error });
    
    
    

    Merci
    vendredi 31 mai 2013 14:22
  • Bonjour,

    Merci pour votre réponse.

    est ce que vous pouvez me dire quels sont les paramètres a mettre dans ce code pour modifier ma configuration

    //je veux l'avoir dans "C:\befor.log"
    Logger.Write(new LogEntry { Message = "teste de log enterprise library!! 1", Severity = TraceEventType.Information });
    
                var builder = new ConfigurationSourceBuilder();
    
                builder.ConfigureLogging()
                       .WithOptions
                         .DoNotRevertImpersonation()
                       .LogToCategoryNamed("General")
                         .SendTo.FlatFile("Flat File Trace Listener")
                           .FormatWith(new FormatterBuilder()
                             .TextFormatterNamed("Text Formatter")
                               .UsingTemplate("Timestamp: {timestamp}...{newline})}"))
                             .ToFile(@"C:\after.log");
    
                var configSource = new DictionaryConfigurationSource();
                builder.UpdateConfigurationWithReplace(configSource);
                EnterpriseLibraryContainer.Current
                  = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
    
    //je veux l'avoir dans "C:\after.log"
    Logger.Write(new LogEntry { Message = "teste de log enterprise library!! 2", Severity = TraceEventType.Information });

      ma configuration:

    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
            <listeners>
                <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\befor.log"
                    formatter="Text Formatter" traceOutputOptions="DateTime" />
            </listeners>

    Merci.

    mardi 4 juin 2013 09:01
  • Bonjour

    Vous me dites que vous utilisez déjà des LogFiltres donc on doit les avoir aussi dans la configuration. Ils peuvent changer le fonctionnement.

    Aussi postez dans l’autre thread, celui-ci  on le laisse comme ça.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 4 juin 2013 09:06
  • oui mais là je les ai enlevé pour avoir un exemple simple .

    mardi 4 juin 2013 09:24
  • je n'arrive pas à mettre des images

    je veux vous montrer ma configuration

    je ne sais pas comment alterner entre deux LogFlter (Prod/recette)

    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="Prod">
            <listeners>
                <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\trace.log"
                    formatter="Text Formatter" traceOutputOptions="None" filter="All" />
                <add name="Flat File Trace Listener 2" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\test\trace.log"
                    formatter="Text Formatter" filter="All" />
            </listeners>
            <formatters>
                <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}"
                    name="Text Formatter" />
            </formatters>
            <logFilters>
                <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    name="Filter Prod">
                    <categoryFilters>
                        <add name="Prod" />
                    </categoryFilters>
                </add>
                <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    name="Filter Recette">
                    <categoryFilters>
                        <add name="Recette" />
                    </categoryFilters>
                </add>
            </logFilters>

    mardi 4 juin 2013 10:42
  • Le fichier de config c'est peu importante dans votre situation. 
    Avec Fluent Configuration API  vous n'utilisez pas la config dans le fichier app.config.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 4 juin 2013 11:02
  • Mon fichier app.config je le modifier avec le Framwork d'Enterprise Library

    mardi 4 juin 2013 12:40
  • Et le code :

              var builder = new ConfigurationSourceBuilder();
                builder.ConfigureLogging()
                    .WithOptions
                    .DoNotRevertImpersonation()
                    .LogToCategoryNamed("Before")
                    .SendTo.FlatFile("Before Log File")
                    .FormatWith(new FormatterBuilder()
                                    .TextFormatterNamed("Text Formatter")
                                    .UsingTemplate(
                                        "Timestamp: {timestamp}{newline Message: {message}{newline}Category: {category}{newline}"))
                    .ToFile("d:\\logs\\1_Before.log")
                     .LogToCategoryNamed("After").SendTo.FlatFile ("After Log File").FormatWith(new FormatterBuilder()
                                    .TextFormatterNamed("Text Formatter")
                                    .UsingTemplate(
                                        "Timestamp: {timestamp}{newline Message: {message}{newline}Category: {category}{newline}"))
                        .ToFile("d:\\logs\\2_After.log");
             //.SendTo.SharedListenerNamed("Flat File Trace Listener");
    
                var configSource = new DictionaryConfigurationSource();
                builder.UpdateConfigurationWithReplace(configSource);
    
                EnterpriseLibraryContainer.Current
                  = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
                LogWriterFactory logFactory = new LogWriterFactory(configSource);
                LogWriter logWriter = logFactory.CreateDefault();
                logWriter.Write("This is before  message", "Before");
                logWriter.Write("This is after message" ,"After");  
    

    Il ecrit les deux messages dans les deux fichiers 1_before.log et 2_After.log

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 4 juin 2013 13:08
  • Merci pour votre réponse.

    mais mon problème c'est que dans mon code il y' a des milliers de lignes

    Logger.Write(new LogEntry { Message = "...............", Severity = TraceEventType.Error });
    
    Logger.Write(new LogEntry { Message = "..............", Severity = TraceEventType.Information });
    
    
    

    et je souhaite pouvoir alterner entre l'endroit d’écriture des logs  en fonction du paramètre:

    Prod ou Recette

    Merci

     
    mardi 4 juin 2013 13:49
  • Qu’est que vous comprenez par mode RECETTE/PRODUCTION?
    Vous devez envoyer ce paramètre RECETTE/PRODUCTION vers le Logger.Write. 
    Et on ne peut pas faire ça sans modifier le code.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 4 juin 2013 14:13
  • Merci pour vos réponse j'ai finalement cette solution je vais la proposer pour voir si le chef l'accepte:

    config:

    <listeners>
                <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\trace.log"
                    formatter="Text Formatter" traceOutputOptions="None" filter="All" />
                <add name="Flat File Trace Listener 2" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    fileName="C:\Documents and Settings\kbaiche\Desktop\test\trace.log"
                    formatter="Text Formatter" filter="All" />
    </listeners>
    
    
    <categorySources>
                <add switchValue="All" autoFlush="true" name="Prod">
                    <listeners>
                        <add name="Flat File Trace Listener" />
                    </listeners>
                </add>
                <add switchValue="All" name="Recette">
                    <listeners>
                        <add name="Flat File Trace Listener 2" />
                    </listeners>
                </add>
    </categorySources>

    et ce code:

    Logger.Write(new LogEntry { Message = "Message Prod ", Severity = TraceEventType.Error }, "Prod");
    Logger.Write(new LogEntry { Message = "Message Recette", Severity = TraceEventType.Error }, "Recette");

    Merci.

    mardi 4 juin 2013 14:37