문제

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. 레벨 (경고, 오류, 정보) 및 범주를 지정할 수 있습니다.

MSDN의 추적 클래스
이벤트에 쓰기 웹 응용 프로그램에 로그인합니다
udptraceListener -Log2Console과 같은 로그 뷰어에게 Log4Net 호환 XML 메시지를 쓰기

다른 팁

나는 보는 것을 강력히 추천합니다 log4net. 이것 게시하다 시작하는 데 필요한 대부분의 것을 다룹니다.

또 다른 좋은 로깅 라이브러리입니다 nlog, 파일, 데이터베이스, 이벤트 로거 등과 같은 많은 다른 장소에 로그인 할 수 있습니다.

나는 사용한다 객체 녀석의 로깅 프레임 워크-그것을 시도하는 대부분의 사람들도 마찬가지입니다. 이 사람은 흥미로운 점이 있습니다 코멘트 그것에 대해.

엔터프라이즈 라이브러리 탄탄한 대안입니다 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);

다른 스레드에서 말했듯이, 우리는 객체 녀석의 로깅 프레임 워크 몇 년 동안 여러 생산 앱에서. 사용하기 쉽고 확장하기 쉽습니다.

log4net 다소 포괄적 인 로깅 프레임 워크로, 다른 레벨 (디버그, 오류, 치명적)으로 기록 하고이 로그 문을 다른 위치 (롤링 파일, 웹 서비스, Windows 오류)로 출력 할 수 있습니다.

로거 인스턴스를 만들어서 어디서나 쉽게 로그인 할 수 있습니다.

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

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

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

시리 로그 여기 파티에 늦었지만 테이블에 몇 가지 흥미로운 옵션이 제공됩니다. 사용하는 클래식 텍스트 기반 로거처럼 보입니다.

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 테이블 스토리지는 DIY에게 매우 인기있는 것 같습니다. 나는 원래 Serilog를 구축했으며 (커뮤니티 프로젝트이지만) 이제는 서열, 이러한 종류의 구조화 된 로그 이벤트의 저장 및 쿼리를 제공합니다.

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

log4net에 대한 ditto. 실제로 사용하기 위해 두 비트를 추가하고 있기 때문에 일부 오픈 소스 구현을보고 편리한 추가 기능이있는 실제 코드 샘플을 볼 수 있습니다. log4net의 경우, 나는 내 머리 꼭대기를보고 있습니다. 하위 텍스트. 특히 응용 프로그램 시작 및 어셈블리 인포 비트를 살펴보십시오.

시스템의 사용에 대한 실현 된 몇 가지 의견에 대해서도 로깅을위한 진단 방법, 나는 또한 디버그 뷰 도구는 필요할 때 디버그 출력을 확인하는 데 매우 깔끔합니다. 필요하지 않은 한 로그 파일을 생성 할 필요가 없으며 필요할 때 디버그 뷰를 시작합니다.

System.Diagnostics의 추적으로 내장 된 것은 .NET 프레임 워크에서 괜찮으며 많은 응용 프로그램에서 사용합니다. 그러나 내가 여전히 Log4Net을 사용하는 주요 이유 중 하나는 내장 된 .NET Framework Tracing에 Log4Net이 이미 내장 공급하는 유용한 전체 기능이 부족하기 때문입니다.

예를 들어, vb.net dll의 다른 .NET 프레임 워크에 정의 된 좋은 롤링 파일 추적 리스너는 실제로 전체 기능이 아닌 모든 것이 아닙니다.

개발 환경에 따라 타사 도구를 사용할 수 없다면 Log4Net을 사용하는 것이 좋습니다. 그러면 System.Diagnostics 추적 클래스를 사용한다고 말합니다. 더 나은 Appender/Tracelistener가 필요하다면 언제든지 직접 구현할 수 있습니다.

예를 들어 많은 고객은 회사 시스템에 설치할 때 오픈 소스 라이브러리를 사용하지 않으므로 .NET 프레임 워크 추적 클래스는 완벽하게 맞습니다.

추가로 - http://www.postsharp.org/ Code Project에서 여기에 시연 된대로 로깅을 지원할 수있는 AOP 라이브러리입니다.http://www.codeproject.com/kb/dotnet/log4postsharp-intro.aspx.

예외적입니다 로깅에 사용할 수있는 가장 쉬운 NUGET 패키지 중 하나입니다. 그것은 오픈 소스 프로젝트. 자동으로 처리되지 않은 예외 및 옵션을 관리합니다. 수동으로 로그 사용 가능합니다. 온라인 또는 로그인 할 수 있습니다 셀프 호스트 로컬 서버에서.

다른 사람들이 말했듯이 Log4net은 상당히 일반적이며 Log4J와 유사하며 Java를 수행하면 도움이됩니다.

또한 로깅 애플리케이션 블록을 사용할 수있는 옵션도 있습니다. http://www.codeproject.com/kb/architecture/getstartedloggingblock.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top