Nuget에서 받을 수 있는 Log4NET나 Core에서는 자체제공 ILogger 와 같은 것들이 있지만..
그래도 상황에 따라 간단하게 막 사용하는 텍스트 파일 로깅을 구현해서 사용 하였다.
public class TextLog
{
// 경로를 Config에 넣어놓고 가져다 사용하는 것이 좋다
// 기본 경로는 웹사이트 기준 /www/TextLog 가 된다. 쓰기 금지가 되어 있다면 폴더에 IUSER 계정에 대해 쓰기 권한을 줘야한다
private static readonly string LogPath = HttpContext.Current.Server.MapPath("/TextLog/").ToString();
/// <summary>
/// 로그를 작성한다
/// </summary>
/// <param name="logMessage">로그텍스트</param>
public static void Write(string logMessage)
{
string headerAndText = $"[{DateTime.Now}] {logMessage}";
string logFileName = $"TextLog_{DateTime.Now.ToShortDateString()}";
if (!Directory.Exists(TextLog.LogPath)) Directory.CreateDirectory(TextLog.LogPath);
using (var fs = new FileStream($"{TextLog.LogPath}{logFileName}.txt"
, FileMode.Append
, FileAccess.Write))
{
using (var sw = new StreamWriter(fs, Encoding.UTF8))
{
sw.WriteLine(headerAndText);
sw.Flush();
sw.Close();
}
fs.Close();
}
}
}
- 사용방법
- 외부 Repository 프로젝트에서도 사용할 수 있는데
using System.Web; 을 넣고 Mappath()를 사용할 수 있도록 잡아 주거나
c#이나 윈폼과 같은 로컬 프로그램이면, LogPath 에 절대 경로를 넣어도 될 것 같다
실행 결과는 다음과 같다.
최신 로그가 맨 위로 쌓여야 한다면, 기존 로그을 읽어와서 새 로그를 쌓고 기존로그를 덮으면 되는데
로그양이 많아지면 성능적 이슈가 생긴다.
public class TextLog
{
private static readonly string LogPath = HttpContext.Current.Server.MapPath("/TextLog/").ToString();
/// <summary>
/// 로그를 작성한다 (최신로그 맨위)
/// </summary>
/// <param name="logMessage">로그텍스트</param>
public static void Write(string logMessage)
{
string headerAndText = $"[{DateTime.Now}] {logMessage}";
string logFileName = $"TextLog_{DateTime.Now.ToShortDateString()}.txt";
string logFilePath = Path.Combine(TextLog.LogPath, logFileName);
if (!Directory.Exists(TextLog.LogPath))
Directory.CreateDirectory(TextLog.LogPath);
// 기존 로그 읽어오기
string existingLog = "";
if (File.Exists(logFilePath))
{
existingLog = File.ReadAllText(logFilePath, Encoding.UTF8);
}
// 새로운 로그를 기존 로그 앞에 추가
using (var fs = new FileStream(logFilePath, FileMode.Create, FileAccess.Write))
{
using (var sw = new StreamWriter(fs, Encoding.UTF8))
{
sw.WriteLine(headerAndText); // 새로운 로그를 먼저 작성
sw.Write(existingLog); // 기존 로그를 뒤에 추가
sw.Flush();
sw.Close();
}
fs.Close();
}
}
}
'C#.NET > C#' 카테고리의 다른 글
Dapper ORM 사용 예제 (0) | 2024.10.22 |
---|---|
Spring의 Class ToString 을 비슷하게 구현해보자 (0) | 2024.09.20 |
c# 권장 코딩 규칙 가이드 (0) | 2020.06.09 |
C#을 통한 Javascript 압축 (한글불가) (0) | 2020.06.03 |