J'aimerais implémenter la journalisation dans mon application, mais préférerais ne pas utiliser de frameworks extérieurs comme log4net.
Donc, je voudrais faire quelque chose comme DOS echo dans un fichier. Quel est le moyen le plus efficace de le faire?
Existe-t-il un moyen de journaliser les exceptions non gérées sans utiliser de structure externe?
public void Logger(String lines)
{
// Write the string to a file.append mode is enabled so that the log
// lines get appended to test.txt than wiping content and writing the log
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt",true);
file.WriteLine(lines);
file.Close();
}
Pour plus d'informations MSDN :
Je préférerais ne pas utiliser de frameworks externes comme log4j.net.
Pourquoi? Log4net répondrait probablement à la plupart de vos besoins. Par exemple, vérifiez cette classe: RollingFileAppender .
Log4net est bien documenté et il existe des milliers de ressources et de cas d'utilisation sur le Web.
Vous pouvez écrire directement dans un journal des événements. Vérifiez les liens suivants:
http://support.Microsoft.com/kb/307024
http://msdn.Microsoft.com/en-us/library/system.diagnostics.eventlog.aspx
Et voici l'exemple de MSDN:
using System;
using System.Diagnostics;
using System.Threading;
class MySample{
public static void Main(){
// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource"))
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatedEventSource");
Console.WriteLine("Exiting, execute the application a second time to use the source.");
// The source is created. Exit the application to allow it to be registered.
return;
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
}
}
Si vous cherchez un moyen vraiment simple de vous connecter, vous pouvez utiliser cette doublure. Si le fichier n'existe pas, il est créé.
System.IO.File.AppendAllText(@"c:\log.txt", "mymsg\n");
J'avais l'habitude d'écrire mon propre journal des erreurs jusqu'à ce que je découvre ELMAH . Je n'ai jamais réussi à obtenir la partie emailing aussi parfaitement qu'ELMAH.
Si vous souhaitez rester à proximité de .NET , extrayez le bloc d’application de journalisation de la bibliothèque Enterprise . -). Regardez ici . Ou pour un tutoriel de démarrage rapide, vérifiez this . J'ai utilisé le bloc d'application Validation de la bibliothèque d'entreprise et cela répond vraiment à mes besoins et il est très facile de "hériter" (l'installer et le référencer!) Dans votre projet.
Si vous voulez votre propre journal d'erreur personnalisé, vous pouvez facilement écrire votre propre code. Je vais vous donner un extrait de l'un de mes projets.
public void SaveLogFile(object method, Exception exception)
{
string location = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\FolderName\";
try
{
//Opens a new file stream which allows asynchronous reading and writing
using (StreamWriter sw = new StreamWriter(new FileStream(location + @"log.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite)))
{
//Writes the method name with the exception and writes the exception underneath
sw.WriteLine(String.Format("{0} ({1}) - Method: {2}", DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString(), method.ToString()));
sw.WriteLine(exception.ToString()); sw.WriteLine("");
}
}
catch (IOException)
{
if (!File.Exists(location + @"log.txt"))
{
File.Create(location + @"log.txt");
}
}
}
Ensuite, pour écrire dans le journal des erreurs, écrivez simplement (q
étant l'exception interceptée)
SaveLogFile(MethodBase.GetCurrentMethod(), `q`);