developer tip

C #에서 오류 로깅

copycodes 2020. 10. 23. 08:02
반응형

C #에서 오류 로깅


C ++ 코딩에서 C #으로 전환하고 있습니다. 내 C ++ 오류 로깅 /보고 매크로 시스템을 C #에서 비슷한 것으로 교체해야합니다.

내 C ++ 소스에서 다음과 같이 작성할 수 있습니다.

LOGERR ( "일부 오류"); 또는 LOGERR ( "% s 및 % d 입력 오류", stringvar, intvar);

그런 다음 매크로 및 지원 라이브러리 코드는 소스 파일, 소스 행, 사용자 이름 및 시간과 함께 (varargs) 형식의 메시지를 데이터베이스로 전달합니다. 또한 나중에 사용자에게보고하기 위해 동일한 데이터가 데이터 구조에 채워집니다.

누구든지이 기본적인 오류보고 / 로깅을 수행하는 예제에 대한 C # 코드 조각이나 포인터를 가지고 있습니까?

편집 : 이 질문을했을 때 저는 .NET을 처음 접했고 System.Diagnostics.Trace를 알지 못했습니다. System.Diagnostics.Trace는 그 당시 제가 필요했던 것이 었습니다. 그 이후로 로깅 요구 사항이 더 크고 복잡한 프로젝트에서 log4net을 사용했습니다. 500 줄의 XML 구성 파일을 편집하면 log4net이 필요한 모든 작업을 수행합니다. :)


여기에 많은 log4net 옹호자들이 있으므로 이것이 무시 될 것이라고 확신하지만 내 자신의 선호도를 추가 할 것입니다.

System.Diagnostics.Trace

이것은 당신의 수신 청취자 포함 Trace()방법 다음 로그 파일 / 출력 창 / 이벤트 로그에 쓰기를, 포함 된 프레임 워크의 사람은 DefaultTraceListener, TextWriterTraceListener하고 EventLogTraceListener. 레벨 (경고, 오류, 정보) 및 범주를 지정할 수 있습니다.


웹 응용 프로그램 UdpTraceListener 의 이벤트 로그에 쓰기 MSDN의 Trace 클래스
-log2console과 같은 로그 뷰어에 log4net 호환 XML 메시지 쓰기


log4Net을 보는 것이 좋습니다 . 게시물 은 시작하는 데 필요한 대부분의 내용을 다룹니다.


또 다른 좋은 로깅 라이브러리는 파일, 데이터베이스, 이벤트 로거 등과 같은 다양한 위치에 로깅 할 수있는 NLog입니다 .


저는 The Object Guy의 로깅 프레임 워크를 사용 합니다. 이 사람은 그것에 대해 몇 가지 흥미로운 의견을 가지고 있습니다.


엔터프라이즈 라이브러리log4net 의 확실한 대안 이며 다른 기능 (캐싱, 예외 처리, 유효성 검사 등)도 제공합니다. 나는 내가 만드는 거의 모든 프로젝트에서 그것을 사용합니다.

추천.


개인적으로 싫지만 log4net 은 사실상 C # 로깅의 표준 인 것 같습니다. 샘플 사용법 :

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);

다른 스레드에서 말했듯이, 우리는 여러 프로덕션 앱에서 몇 년 동안 The Object Guy의 로깅 프레임 워크사용해 왔습니다. 사용 및 확장이 매우 쉽습니다.


Log4Net 은 다양한 수준 (디버그, 오류, 치명적)으로 로그하고 이러한 로그 문을 다른 위치 (롤링 파일, 웹 서비스, Windows 오류)에 출력 할 수있는 다소 포괄적 인 로깅 프레임 워크입니다.

로거 인스턴스를 생성하여 어디서나 쉽게 로그 할 수 있습니다.

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

그런 다음 오류를 기록합니다.

_log.Error("Error messsage", ex);

Serilog 는 여기 파티에 늦었지만 테이블에 흥미로운 옵션을 제공합니다. 사용하는 것은 고전적인 텍스트 기반 로거와 매우 유사합니다.

Log.Information("Hello, {0}", username);

그러나 이전 프레임 워크와 달리 파일이나 콘솔과 같이 텍스트를 쓸 때 메시지와 인수를 문자열로만 렌더링합니다.

아이디어는 로그에 'NoSQL'스타일 데이터 저장소를 사용하는 경우 다음과 같은 이벤트를 기록 할 수 있다는 것입니다.

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

.NET 형식 문자열 구문이 확장되어 위의 예를 다음과 같이 작성할 수 있습니다.

Log.Information("Hello, {Name}", username);

이 경우 속성이 Name(대신 0) 호출 되어 쿼리 및 상관 관계가 더 쉬워집니다.

이미 몇 가지 좋은 저장 옵션이 있습니다. MongoDB 및 Azure Table Storage는 DIY에 매우 인기있는 것 같습니다. 나는 원래 Serilog (커뮤니티 프로젝트 임에도 불구하고)를 구축했으며 현재 이러한 종류의 구조화 된 로그 이벤트를 저장하고 쿼리하는 Seq 라는 제품을 작업하고 있습니다.


내장 된 .NET 로깅을 사용할 수 있습니다. TraceSource 및 TraceListeners를 살펴보면 .config 파일에서 구성 할 수 있습니다.


log4net도 마찬가지입니다. 실제 사용을 위해 일부 오픈 소스 구현을 살펴보고 몇 가지 편리한 추가 기능이있는 실제 코드 샘플을 보는 것이 합리적이기 때문에 2 비트를 추가합니다. log4net의 경우 내 머리 꼭대기에서 subtext를 보는 것이 좋습니다 . 특히 애플리케이션 시작 및 어셈블리 정보 비트를 살펴보십시오.


Further to the couple of comments realting to the use of the System.Diagnostics methods for logging, I would also like to point out that the DebugView tool is very neat for checking debug output when needed - unless you require it, there is no need for the apps to produce a log file, you just launch DebugView as and when needed.


The built in tracing in System.Diagnostics is fine in the .NET Framework and I use it on many applications. However, one of the primary reasons I still use log4net is that the built in .NET Framework tracing lacks many of the useful full featured appenders that log4net already supplies built in.

For instance there really isn't a good rolling file trace listener defined in the .NET Framework other than the one in a VB.NET dll which really is not all that full featured.

Depending on your development environment I would recommend using log4net unless 3rd party tools are not available, then I'd say use the System.Diagnostics tracing classes. If you really need a better appender/tracelistener you can always implement it yourself.

For instance many of our customers require that we do not use open source libraries when installed on their corporate machines, so in that case the .NET Framework tracing classes are a perfect fit.

Additionally - http://www.postsharp.org/ is an AOP library I'm looking into that may also assist in logging as demonstrated here on code project:http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx.


ExceptionLess is one of the easiest nuget package available to use for logging. Its an open source project. It automatically takes care of unhandled exception, and options for manually logs are available. You can log to online or self host on local server.


Log4Net, as others have said, is fairly common and similar to Log4j which will help you if you ever do any Java.

You also have the option of using the Logging Application Block http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

참고URL : https://stackoverflow.com/questions/147557/error-logging-in-c-sharp

반응형