Comment définir de façon dynamique le fichier journal à l'aide de l'App.config et du Système.Diagnostic?
Je cherchais une solution pour permettre la journalisation pour mon dernier projet quand je suis tombé sur un article ( http://www.daveoncsharp.com/2009/09/create-a-logger-using-the-trace-listener-in-csharp/ ) qui parlé de l'utilisation du Système.Diagnostics et App.config pour ouvrir une session via la méthode Trace. J'ai été en mesure de mettre en œuvre avec succès à la fois la classe et de l'Application.config mais je voudrais vraiment être en mesure d'attribuer dynamiquement la valeur et l'emplacement (à l'intérieur de initializeData) du fichier journal et je n'ai pas la moindre idée de comment le faire. Si vous avez des suggestions, n'hésitez pas à poster!
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="fileSizeThreshold=512, fileSizeUnit=kilobytes,
fileAgeThreshold=1, fileAgeUnit=months, fileNameTemplate='{0}\MyApp-{1:MMM-yy}.log'"/>
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Enregistreur De Classe:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace MyCurrentProject
{
class Logger
{
public void Error(string module, string message)
{
WriteEntry(message, "ERROR:", module);
}
public void Error(Exception ex, string module)
{
WriteEntry(ex.Message, "ERROR:", module);
}
public void Warning(string module, string message)
{
WriteEntry(message, "WARNING:", module);
}
public void Info(string module, string message)
{
WriteEntry(message, "INFO:", module);
}
private void WriteEntry(string message, string type, string module)
{
Trace.WriteLine(
string.Format("{0} {1} [{2}] {3}",
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
type,
module,
message));
}
}
}
RE: Désolé de ne pas être clair... juste pour être clair, j'ai besoin du chemin d'accès du fichier que le fichier journal de sortie est de sauvegarder à la dynamique du jeu. J'aimerais le chemin pour enregistrer un emplacement dans %AppData%. Le problème que j'avais avec la config est qu'une fois que j'ai défini la valeur de 'initializeData" je ne pouvais pas trouver un moyen de modifier ou de définir de façon dynamique/réinitialiser cette valeur. Franchement... à ce point, je veux juste une solution qui fonctionne et qui me permet de gérer l'emplacement du fichier journal.
OriginalL'auteur Simpleton | 2012-10-10
Vous devez vous connecter pour publier un commentaire.
Voici un exemple à l'aide de Systèmes.Diagnostics, ce qui a deux avantages par rapport aux non-bibliothèques de classes de base. Il est toujours possible (dans les grandes organisations), toujours disponible, et dans la mesure où les développeurs sont familiarisés avec la bibliothèque de classes de base, le lot suivant de l'entretien, les développeurs ont entendu parler de lui.
Re: comment mettre en forme la sortie
Essayez l'une de ces deux pour les auditeurs de mettre en œuvre basé sur un modèle de trace mise en forme/de sortie à l'aide de Systèmes.Diagnostics classes:
http://essentialdiagnostics.codeplex.com
ou http://ukadcdiagnostics.codeplex.com/
Les systèmes.Les Diagnostics ne fournit pas pour tout le formatage ou outputing de la norme jetons.
Ok, alors je ne suis pas sûr que j'ai compris dans votre question, ce que vous entendez par "attribuer dynamiquement la valeur et l'emplacement du fichier journal". App.la config est lu qu'une seule fois lorsque le domaine d'application est chargé-- pour winforms juste au début de l'application, pour asp.net 1ère demande ou de l'application recycle (ou quand le web.config modifications de provoquer un recyclage). Pas très dynamique. Pour le rendre accessible à tous, mettre dans une classe statique, qui sont partagées dans le domaine de l'application. Dans ASP.NET, faire le travail dans le global.asax. Pour intercepter la sortie et le format à votre convenance, vous avez besoin d'un écouteur personnalisé. Voir le post pour les suggestions.
Désolé de ne pas être clair... juste pour être clair, j'ai besoin du chemin d'accès du fichier que le fichier journal de sortie est de sauvegarder à la dynamique du jeu. J'aimerais le chemin pour enregistrer un emplacement dans %AppData%. Le problème que j'avais avec la config est qu'une fois que j'ai défini la valeur de 'initializeData" je ne pouvais pas trouver un moyen de modifier ou de définir de façon dynamique/réinitialiser cette valeur. Franchement... à ce point, je veux juste une solution qui fonctionne et qui me permet de gérer l'emplacement du fichier journal.
Le code ci-dessus devrait fonctionner pour que le chemin d'accès au fichier est dans le TextWriterTraceListener du constructeur. Supprimer et ré-ajouter l'écouteur lorsque vous en avez besoin pour écrire dans un fichier différent (dire le nom de ce journal + DateTime.Maintenant + .txt
OriginalL'auteur MatthewMartin
Je sais que je peut descendre a voté pour ça, mais je vais aller hors du ranch pour une minute et je vais vous suggérons d'utiliser un autre outil dans la boîte à outils. Log4Net est un outil très puissant et succincte de journalisation. Par exemple, ci-dessous est une application console qui l'utilise et il est entièrement fonctionnel comme vous le voyez.
Mais disons que nous avons voulu le faire avec un fichier de configuration comme vous voulez dire que vous souhaitez utiliser. Eh bien, c'est assez simple! Ci-dessous est la configuration que nous avait lieu dans le
App.config
pour accomplir la même chose:Alors que la configuration peut être utilisée comme ceci:
Et ne laissez pas le motif de trucs à vous surprendre, c'est juste la configuration de ce que vous êtes de codage ci-dessus de sorte que vous pouvez avoir une certaine cohérence dans les messages. Il tient, il est facile, mais parce que tout ce que vous devez ouvrir une session est l'information qui doit être branché sur le motif et le motif est ensuite encapsulé loin.
C'est un cours intensif de Log4Net, mais la raison pour laquelle je suis vraiment à recommander, c'est parce que dans les deux exemples ci-dessus, vous voyez qu'ils se sont connectés à la console, mais vous avez une pléthore de bûcherons, il suffit de regarder cette liste:
log4net.Appender.AdoNetAppender: Écrit de l'enregistrement des événements dans une base de données en utilisant soit préparé des déclarations ou des procédures stockées.
log4net.Appender.AnsiColorTerminalAppender: Écritures de couleur en surbrillance l'enregistrement des événements d'une fenêtre de terminal ANSI.
log4net.Appender.AspNetTraceAppender: Écrit de l'enregistrement des événements de l'ASP trace contexte. Ceux-ci peuvent ensuite être rendue à la fin de la page ASP ou sur l'ASP trace de la page.
log4net.Appender.ColoredConsoleAppender: Écritures de couleur en surbrillance l'enregistrement des événements pour les Fenêtres de l'application Console.
log4net.Appender.ConsoleAppender: Écrit de l'enregistrement des événements de l'application de la Console. Les événements peuvent rendre à la norme de nos flux ou le flux d'erreur standard.
log4net.Appender.DebugAppender: Écrit de l'enregistrement des événements de la .NET système.
log4net.Appender.EventLogAppender: Écrit de l'enregistrement des événements le Journal des Événements Windows.
log4net.Appender.FileAppender: Écrit de l'enregistrement des événements dans un fichier dans le système de fichiers.
log4net.Appender.LocalSyslogAppender: Écrit de journalisation des événements pour les locaux de service syslog (UNIX uniquement).
log4net.Appender.MemoryAppender: Stocke l'enregistrement des événements dans une mémoire tampon.
log4net.Appender.NetSendAppender: Écrit de journalisation des événements pour le service Windows Messenger. Ces messages sont affichés dans une boîte de dialogue sur une borne d'utilisateurs.
log4net.Appender.OutputDebugStringAppender: Écrit de l'enregistrement des événements dans le débogueur. Si l'application n'a pas de débogueur le débogueur système affiche la chaîne. Si l'application n'a pas de débogueur et le débogueur de système n'est pas actif, le message est ignoré.
log4net.Appender.RemoteSyslogAppender: Écrit de l'enregistrement des événements d'un syslog distant service UDP en utilisant la mise en réseau.
log4net.Appender.RemotingAppender: Écrit de journalisation des événements pour un accès distant de l'évier à l'aide .NET remoting.
log4net.Appender.RollingFileAppender: Écrit de l'enregistrement des événements dans un fichier dans le système de fichiers. Le RollingFileAppender peut être configuré pour se connecter à de multiples fichiers basé sur la date ou la taille du fichier de contraintes.
log4net.Appender.SmtpAppender: Envoie les événements d'enregistrement d'une adresse e-mail.
log4net.Appender.SmtpPickupDirAppender: Envoie les événements d'enregistrement d'une adresse e-mail mais écrit les e-mails configurable répertoire plutôt que de les envoyer directement via le protocole SMTP.
log4net.Appender.TelnetAppender: les Clients de se connecter via Telnet à recevoir l'enregistrement des événements.
log4net.Appender.TraceAppender: Écrit de l'enregistrement des événements de la .NET du système de trace.
log4net.Appender.UdpAppender: Envoie l'enregistrement des événements comme sans connexion datagrammes UDP à un hôte distant ou un groupe de multidiffusion à l'aide d'un UdpClient.
Donc, comme vous pouvez le voir, il est extrêmement capable OOB. J'espère que ce post vous a été utile.
log4net a un NuGet package que vous pouvez trouver ici (nuget.org/packages/log4net) de sorte que vous pouvez simplement tirer vers le bas à travers le Gestionnaire de Package NuGet. Si vous n'avez pas le trouver ici (visualstudiogallery.msdn.microsoft.com/...).
J'ai pu installer log4net via NuGet, mais je n'arrivais pas à localiser le paquet dans la liste des références disponibles. Comment puis-je ajouter la référence?
En fait, il semble que cela automatiquement jointe la référence à mon projet. Dois-je exécuter cette commande à chaque fois que je veux utiliser/ajoutez une référence à log4net à mes projets?
c'est exact, utilisez NuGet pour installer log4net pour tous vos projets ... il ajoute la référence automatiquement comme vous l'avez vu.
OriginalL'auteur Mike Perrenoud