C#/기술 개발

C# 세리로그 프로그램 (Serilog)

sheepone 2021. 5. 10. 10:31
반응형

사용이유

자체 제작한 로그 프로그램 이용중이였으나
실사용시에 자잘한 문제점들로 인하여 사용을 잘 못하게 되는 부분이 있는데 이부분들이 충족되어 있는 로그 검토

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 stop
    seq uninstall
    seq install --ram-target=50
    seq start
    seq 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

 

Serilog

Serilog is Seq's most supported logging library. Begin logging to Seq by adding the Serilog.Sinks.Seq package.

docs.datalust.co

 

비교

https://stackify.com/nlog-vs-log4net-vs-serilog/stackify.com/nlog-vs-log4net-vs-serilog/

 

NLog vs log4net vs Serilog: Compare .NET Logging Frameworks

Compare three of the most popular logging frameworks in the .NET space: log4net, NLog, and Serilog. Understand each frameworks' pros and cons.

stackify.com

 

기타

이메일로 보내기

https://github.com/serilog/serilog-sinks-email

 

GitHub - serilog/serilog-sinks-email: A Serilog sink that writes events to SMTP email

A Serilog sink that writes events to SMTP email. Contribute to serilog/serilog-sinks-email development by creating an account on GitHub.

github.com

 

 

반응형