ASP.NET에서 예외 처리 로그를 출력하게 하는 것을 구현
LogMgr 클래스 만들기
public class LogMgr
{
static string prefixMsg = "\r\n-------------------------------------------";
// 일반 로그 남기기
static public void Log(string msg)
{
try
{
string logFileName = DateTime.Now.ToString("yyyy-MM-dd") + ".log";
StreamWriter tw = File.AppendText(logFileName);
tw.WriteLine(prefixMsg);
tw.WriteLine(msg);
tw.Close();
}
catch (Exception)
{
}
}
// 예외 로그
static public void ExceptionLog(Exception ex, string titleString = null)
{
string msg = "";
if (!string.IsNullOrEmpty(msg))
{
msg = titleString + "\r\n";
}
msg += GetExceptionMessage(ex);
msg = "예외 발생 일자 : " + DateTime.Now.ToString() + msg + "\r\n";
Log(msg);
}
// 마지막 예외 로그
static public void LastExceptionLog(string titleString = null)
{
//예외를 데이터베이스나 파일에 로깅한다
Exception ex = HttpContext.Current.Server.GetLastError();
ExceptionLog(ex, titleString);
}
// 예외 메세지 만들기
static private string GetExceptionMessage(Exception ex)
{
string err = "\r\n 에러 발생 원인 : " + ex.Source +
"\r\n 에러 메시지 :" + ex.Message +
"\r\n Stack Trace : " + ex.StackTrace.ToString();
if (ex.InnerException != null)
{
err += GetExceptionMessage(ex.InnerException);
}
return err;
}
}
사용)
Global.asax 파일에 전역 예외처리 로그 작성(try catch 잡지 않은 예외를 로그파일에 출력)
public class Global : System.Web.HttpApplication
{
...
...
protected void Application_Error(object sender, EventArgs e)
{
// 예외 처리구간에서 예외가 나왔을때는 예외처리를 하지 않는다.
try
{
LogMgr.LastExceptionLog("Application_Error");
}
catch(Exception)
{
}
}
}
try catch 예외 처리 로그로 사용.
DBConn conn = new DBConn();
try
{
conn.Open();
conn.CreateCommand(sql);
conn.AddParam("@USER_CODE", userName);
SqlDataReader reader = conn.ExecuteReader();
if (reader.Read())
{
playername = reader["USER_NAME"].ToString();
ret = true;
}
}
catch (Exception e)
{
LogMgr.ExceptionLog(e);
}
finally
{
conn.Close();
}
return ret;
일반 로그로 사용.
LogMgr.Log("하이 로그 테스트");