web-dev-qa-db-ja.com

サードパーティライブラリを使用せずにC#でログを記録するにはどうすればよいですか?

アプリケーションにロギングを実装したいのですが、log4netのような外部フレームワークは使用しません。

だから、DOSの echo のようなことをファイルにしたいと思います。最も効果的な方法は何ですか?

外部フレームワークを使用せずにログに記録された未処理の例外をログに記録する方法はありますか?

89
IAdapter
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();

}

詳細情報 MSDN

63
Brandon

Log4j.netのような外部フレームワークは使用しません。

どうして? Log4netはおそらく、ほとんどの要件に対応します。たとえば、このクラスを確認してください: RollingFileAppender

Log4netは十分に文書化されており、Webには数千のリソースとユースケースがあります。

22
empi

イベントログに直接書き込むことができます。次のリンクを確認してください。
http://support.Microsoft.com/kb/307024
http://msdn.Microsoft.com/en-us/library/system.diagnostics.eventlog.aspx

そして、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.");

    }
}
16
šljaker

本当に簡単なログ記録方法を探している場合は、この1つのライナーを使用できます。ファイルが存在しない場合は作成されます。

System.IO.File.AppendAllText(@"c:\log.txt", "mymsg\n");
15
live-love

ELMAH を発見するまでは、独自のエラーロギングを記述していました。私は、ELMAHのようにメール送信部分を完全に削除することはできませんでした。

7
jonezy

.NETの近くにを残したい場合チェックアウトEnterprise Library Logging Application Blockこちら を見てください。または、クイックスタートチュートリアルで this を確認してください。 Enterprise LibraryのValidationアプリケーションBlockを使用しましたが、これは本当に私のニーズに合っており、プロジェクトで「継承」(インストールして参照する)が非常に簡単です。

6
Bernoulli IT

独自のカスタムエラーロギングが必要な場合は、独自のコードを簡単に作成できます。私のプロジェクトのスニペットを紹介します。

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");
        }
    }
}

次に、実際にエラーログに書き込むには、単に書き込みます(qはキャッチされた例外です)

SaveLogFile(MethodBase.GetCurrentMethod(), `q`);
4