내 응용 프로그램에서 로깅을 구현하고 싶지만 log4net과 같은 외부 프레임 워크를 사용하지 않습니다.
그래서 파일에 DOS의 에코 와 같은 작업을하고 싶습니다 . 가장 효과적인 방법은 무엇입니까?
외부 프레임 워크를 사용하지 않고 기록 된 처리되지 않은 예외를 기록하는 방법이 있습니까?
내 응용 프로그램에서 로깅을 구현하고 싶지만 log4net과 같은 외부 프레임 워크를 사용하지 않습니다.
그래서 파일에 DOS의 에코 와 같은 작업을하고 싶습니다 . 가장 효과적인 방법은 무엇입니까?
외부 프레임 워크를 사용하지 않고 기록 된 처리되지 않은 예외를 기록하는 방법이 있습니까?
답변:
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
using(System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt", true))
{
file.WriteLine(lines);
}
}
자세한 내용은 MSDN
using
on file 을 사용해야 하지만, 메서드에 로컬이기 때문에 어쨌든 곧 폐기 될 것입니다.
file.WriteLine(lines);
예외가 발생하면 코드가 file.Close();
. 을 사용하는 using
것은 try { // using block } finally { // Dispose }
. 객체가 내부 코드하더라도 배치되도록하는 수단이 using
블록 예외 슬로우
나는 log4j.net과 같은 외부 프레임 워크를 사용하지 않을 것입니다.
왜? Log4net은 아마도 대부분의 요구 사항을 해결할 것입니다. 예를 들어이 클래스를 확인하십시오 : RollingFileAppender .
Log4net은 잘 문서화되어 있으며 웹에는 수천 개의 리소스와 사용 사례가 있습니다.
이벤트 로그에 직접 쓸 수 있습니다. 다음 링크를 확인하십시오.
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.");
}
}
정말 간단한 기록 방법을 찾고 있다면이 라이너를 사용할 수 있습니다. 파일이 없으면 생성됩니다.
System.IO.File.AppendAllText(@"c:\log.txt", "mymsg\n");
ELMAH를 발견 할 때까지 내 자신의 오류 로깅을 작성했습니다 . ELMAH만큼 완벽하게 이메일 부분을 다운받을 수 없었습니다.
사용자 지정 오류 로깅을 원하는 경우 쉽게 고유 한 코드를 작성할 수 있습니다. 내 프로젝트 중 하나에서 발췌 한 내용을 알려 드리겠습니다.
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
려면 (catch 된 예외가 됨)
SaveLogFile(MethodBase.GetCurrentMethod(), `q`);