14 votes

Création d'un nouveau fichier journal chaque jour

Comme le titre l'indique, comment puis-je créer un nouveau fichier journal chaque jour en C# ? Le programme ne fonctionne pas nécessairement jour et nuit, mais n'est invoqué que pendant les heures de bureau. J'ai donc besoin de faire deux choses.

  1. Comment puis-je créer un nouveau fichier journal chaque jour ? Le fichier journal aura un nom au format MMDDYYYY.txt.
  2. Comment puis-je la créer juste après minuit au cas où elle se prolongerait à toute heure de la nuit ?

39voto

Daniel Dyson Points 9913

Mise à jour 2018 : Je préfère utiliser NLog maintenant

Réponse précédente sur log4net :

Cet exemple montre comment configurer le RollingFileAppender pour faire rouler les fichiers journaux sur une période de date. Dans cet exemple, le fichier journal sera lancé toutes les minutes ! Pour modifier la période de roulement, ajustez la valeur de DatePattern. Par exemple, un modèle de date de "yyyyMMdd" lancera le fichier journal tous les jours.
Voir System.Globalization.DateTimeFormatInfo pour obtenir la liste des modèles disponibles.

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\temp\rolling.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd-HHmm" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

9voto

Abe Miessler Points 34869

Je recommanderais quelque chose comme ça :

string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!System.IO.File.Exists(logFile))
{
    System.IO.File.Create(logFile);   
}
//append to logFile here...

Y a-t-il une raison pour laquelle vous voulez créer quelque chose après minuit ? Pourquoi ne pas simplement le créer s'il n'existe pas lorsque vous enregistrez l'erreur ?

J'ai aussi remarqué que j'ai changé le format de la date. Cela vous permettra de trier les fichiers par nom et de les mettre en ordre. J'utilise toujours ce format lorsque je manipule des dates de quelque manière que ce soit.

8voto

Randolpho Points 36512

D'autres ont mentionné Log4Net, alors je vais m'avancer et vanter les mérites de l'entreprise. Bibliothèque d'entreprise Logging Block, qui est également tout à fait capable de faire ce que vous voulez.

Pourriez-vous inclure un code qui montre à quel point il serait facile de faire ce roulement tous les jours ? Est-ce plus facile que l'exemple de log4Net ? - Daniel Dyson

Bien sûr. Typiquement, on utilise Outil de configuration de la bibliothèque d'entreprise pour construire la configuration ; cet outil demande un peu de temps pour s'y habituer, mais une fois que vous avez compris comment il fonctionne, il est assez puissant. Cela dit, vous pouvez également modifier le fichier app.config à la main.

Voici la sortie de l'outil que j'ai mentionné, qui déverse à peu près tout dans un fichier plat roulant qui roule tous les jours (ou s'il dépasse 2 Mo). Le formatage est celui fourni par défaut par l'outil.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    </configSections>
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="Category">
        <listeners>
            <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"
                formatter="Text Formatter" rollInterval="Day" rollSizeKB="2000" />
        </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>
        <categorySources>
            <add switchValue="All" name="Category">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </add>
        </categorySources>
        <specialSources>
            <allEvents switchValue="All" name="All Events">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </allEvents>
            <notProcessed switchValue="All" name="Unprocessed Category">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </notProcessed>
            <errors switchValue="All" name="Logging Errors &amp; Warnings">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </errors>
        </specialSources>
    </loggingConfiguration>
</configuration>

6voto

Levi Points 81

Essayez le NLog ( nlog-project.org ). Il est très flexible et plus facile à utiliser que Log4Net à mon avis.

Exemple NLog.config :

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}" 
            fileName="${basedir}/${shortdate}/${windows-identity:domain=false}.${level}.log" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>

Pour plus d'exemples (y compris d'autres cibles de journalisation que le fichier), voir Exemples de configuration de NLog sur Github

3voto

glenatron Points 5897

Vous n'avez pas besoin de le créer à un moment précis - dans le cas le plus simple, vous pouvez simplement vérifier s'il existe un fichier journal avec la date du jour comme nom lorsque vous lancez le service de journalisation pour l'application et s'il n'y en a pas, vous pouvez en créer un avant de commencer à y ajouter des données.

Le seul cas auquel vous devez être particulièrement attentif avec cette configuration est celui où l'application fonctionne après minuit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X