2013-03-09 6 views
1

이전의 경험과 연구를 토대로 log4Net을 사용하여 작업장에서 로깅을 구현했습니다.ORM (log4net 및 OpenAccess)을 사용한 로깅

그러나 log4net이 개발 회의에서 발표되었을 때 맞춤형 로거를 사용하는 것이 일반적으로 선호되었습니다. 이유는 구성 파일에서 삽입 쿼리를 지정하는 대신 Telerik의 ORM에서 생성 된 코드를 사용하기 위해서였습니다.

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1"/> 
    <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" /> 
    <connectionStringName value="Test"/> 
    <commandText value="INSERT INTO Log (UniqueId,Date,UserId,Thread,level,Logger,Message,Exception)  VALUES (UUID(),?log_date,?userid,?thread,?log_level,?logger,?message,?exception)" /> 
    ... 

귀하의 조언은 무엇입니까? 이런 목적으로 appender를 만들 수 있습니까? 커스텀 로거를 가져 가야할까요?

자세한 내용은 사용자 정의 로거 here에 대한 긍적 및 부정적인 견해가 있습니다.

감사

답변

0

당신은 사용자 정의 로거를 만들 수 있습니다, 그리고 당신이 물건을 기록 원하는 메커니즘을 사용할 수 있습니다. 개인적으로 AdoNetAppender는 완벽하게 성능이 뛰어난 것으로 나타났습니다.

기업 운영 지원을 담당했지만 메시지를 기록하는 데 가장 낮은 임피던스 기술을 사용하는 것이 좋습니다. 로그는 프로덕션 시스템 디버깅을 통해 자체적으로 제공됩니다. 나는 'db 액세스 패턴 일관성'을 위해 appender를 쓰는 것을 피할 것이다.

DB, ORM, OS 또는 네트워킹 문제가있는 경우 마지막으로 필요한 것은 로거가 작동하지 않는 것입니다. 파일, Windows 디버그 메쉬 및 ETW 로깅은 내가 처음 인스턴스에서 권장하는 것이며 이것이 DB 로깅으로 백업 할 수 있고 더 안전하게 만들 수 있습니다. 적어도 다른 db에 로깅을 넣으므로 프로덕션에 영향을 미치지 않습니다. 시스템. 네트워크 연결이 작동하지 않는 로컬 서버에있는 것이 바람직합니다.

편집 : 당신이 정말로 AdoNetAppender에서 클래스를 파생하고 사용자 정의가되도록의 CommandText 속성을 재정의 할 수 있습니다 원하는 경우

. 여기에 배치 할 수없는 예제가 있습니다. 연결 문자열을 사용하여이 작업을 수행합니다.

+0

'모든 메커니즘'이라고 말하면 구성 파일에 삽입 쿼리를 지정하지 않고도 AdoNetAppender를 사용할 수 있습니까? Log4Net의 기능/성능을 원하고 팀 요구 사항을 만족시킵니다. 제안 해 주셔서 감사합니다. 나는 약간의 연구를하고 다른 데이터베이스를 고려할 것이다. – Nishzone

+0

예, 연결 문자열을 무시할 수있는 예제를 보았습니다. log4net에 "connectionStringName"속성이 있기 전에 사용되었습니다. 나는 commandtext에 대해 같은 방법을 사용하는 것을 고려해 봤지만 팀이 요구하는 데이터 전송 객체를 사용하지는 않습니다. 커스텀 로거가 유일한 해결책 인 것 같습니다. – Nishzone