반응형
사용이유
자체 제작한 로그 프로그램 이용중이였으나
실사용시에 자잘한 문제점들로 인하여 사용을 잘 못하게 되는 부분이 있는데 이부분들이 충족되어 있는 로그 검토
SeriLog
속도
무한정 기록시 5sec에 약 270909번 기록 (서버사용 하면 5sec에 114000번 기록)
현재 사용중인 로그 프로그램 5sec에 약 115002번 기록 (뷰어 기능까지 수행하고 있는 점이 다름)
속도측정 (쓰레드 속도 평균 : 0.053ms 맥스 : 7.328ms)
- GUI에만 로그 전송시 쓰레드 속도 (1분 측정)
평균 : 0.059 ms
맥스 : 21.136 ms - TEXT FILE에만 로그 전송시 쓰레드 속도 (1분 측정)
평균 : 0.069 ms
맥스 : 7.416 ms - GUI + TEXT FILE 로그 전송시 쓰레드 속도 (1분 측정)
평균 : 0.075 ms
맥스 : 23.619 ms - 현재 사용중인 로그 프로그램 로그 전송시 쓰레드 속도 (1분 측정)
평균 : 0.109 ms
맥스 : 22.681 ms
GUI
serilog.sink.seq 로 뷰어 기능 (개인사용시에는 무료, 여러명이 사용시에는 유료)
part로 나누어 볼수 있는 ForContext 기능
실적용 검토
텍스트 파일 기간삭제 기능 필요 (기능 포함 확인)
함수 이름 , 라인 표기 기능 필요
프로그램 백업 기능 필요
장점
검색기능이 기존보다 좋음, 텍스트 파일로만 기록시에는 로스가 거의 없음
기능 검토 및 추가
- GUI + JSON 기능 검토 (납품후 받은 로그파일을 GUI에 연결하기 위함)
GUI + TEXT 로는 GUI에 TEXT를 넣을수가 없음
기존 TEXT를 JSON으로 대체GUI 에 JSON 포함
seq-import "filename" http://localhost:5341
bat 파일로 로그 폴더내에 생성 (위의 파일이름부분은 변경해 줘야함)
GUI 로그 지우는 방법 seq stop , then manually delete the date range in question from
C:\ProgramData\Seq\Extents, then , seq start bat 파일로 로그 폴더내에 생성 (실행하면됨) - 동일 로그 무시하는 기능 추가
- SML,COMMON DLL위치 SML폴더내로 이동 (Serilog dll이 많아 지저분함)
- SEQ 로그 메모리 제한 테스트
10프로~50프로 250000 K
90프로 2200000 K (메모리 사용율 75프로)
기본적으로 너무 많이 쓰고 있는듯 함 일단 50프로로 테스트 예정 (장비 설치시 셋업 필요)seq stopseq uninstallseq install --ram-target=50seq startseq config -k cache.systemRamTarget -v 0.5
seq restar
최신 버전에서 seq config 안될때 Seq.json 파일 수정 하는 방법 (C:\ProgramData\Seq\Seq.json)
"cache": {
"systemRamTarget": 0.5,
"compactLargeObjectHeap": false
},
사용방법
public class Log
{
//COMMON
private static List<string> _pIgnrList = new List<string>();
static bool bStarted = false;
public static void Trace(string _sHeader, string _sTag = "", string _sMessage = "", [CallerLineNumber] int sourceLineNumber = 0, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "")
{
SendSerilog(_sHeader + _sTag + _sMessage,"",sourceLineNumber,memberName,sourceFilePath);
}
public static void SendSerilog(string _sMsg, string _sPart = "", [CallerLineNumber] int sourceLineNumber = 0, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "")
{
//Start Check
if(!bStarted) StartLogMan();
//중복 삭제.
if (SERILOG.iIgnore > 0)
{
while (_pIgnrList.Count > SERILOG.iIgnore) { _pIgnrList.RemoveAt(0);
for (int j = 0; j < _pIgnrList.Count; j++)
{
if(_pIgnrList[j] == _sMsg + _sPart) return;
}
_pIgnrList.Add(_sMsg + _sPart);
}
//Init
Serilog.Log.Logger
.ForContext("Part" ,_sPart )
.ForContext("CallerLineNumber",sourceLineNumber)
.ForContext("CallerMemberName",memberName )
.ForContext("File" ,Path.GetFileName(sourceFilePath))
.Information(_sMsg);
}
public static void StartLogMan()
{
if(bStarted) return;
int.TryParse(SERILOG.Ignore, out SERILOG.iIgnore);
int.TryParse(SERILOG.Period, out int iPeriod );
if(iPeriod == 0) iPeriod = 30;
Serilog.Log.Logger = new LoggerConfiguration()
//.WriteTo.Seq(SERILOG.SeqUrl)//
.WriteTo.Seq("http://localhost:5341")
.WriteTo.RollingFile(new JsonFormatter(),@SERILOG.Path + @"Log-{Date}.txt", LogEventLevel.Verbose,retainedFileCountLimit: iPeriod)
.CreateLogger();
bStarted = true;
}
}
docs.datalust.co/docs/using-serilog
비교
https://stackify.com/nlog-vs-log4net-vs-serilog/stackify.com/nlog-vs-log4net-vs-serilog/
기타
이메일로 보내기
https://github.com/serilog/serilog-sinks-email
반응형
'C# > 기술 개발' 카테고리의 다른 글
프로그램 배포, 인스톨 파일 만들기 프로젝트 (feat NSIS) (0) | 2021.06.07 |
---|---|
C# Machine Learning 프로젝트 (ML.net) (0) | 2021.05.18 |
GitHub 100MB 이상 파일 올리다가 Push 실패시 해결책 (0) | 2021.05.11 |
Azure DevOps 잠긴 파일을 강제로 해제 (0) | 2021.05.11 |
Azure DevOps 비교나 병합이 안될때 (0) | 2021.05.11 |