당신은 log4net에 대한 custom property에 개체의 속성을 추가하고 형식의 속성의 내용을 기록 할 수 있습니다 :
코드에서 예를 들어
:
log4net.ThreadContext.Properties[ "myObjectProperties" ] = obj.prop1 + " " obj.prop2; // + ...;
및 구성 :
<conversionPattern value="%logger (%property{myObjectProperties}) [%level]- %message%newline" />
즉석에서 구성 가능한 패턴을 가질 수 없습니다. 다른 객체와 일치하는 패턴을 여러 개 가질 수는 있지만 관리하기가 쉽지 않습니다.
편집 : 글쎄, 당신은 런타임 구성 패턴 만있을 수 없습니다 기본적으로 :) 당신은 아마도 상기 속성에서로드 할 수있는 패턴을 가질 수 그러나
2 편집 :만큼이있는 경우 4000 개 속성을 필요 왜 고려 중 메시지 자체 (log.Info(myObject.ToString())
)의 일환으로 모든 속성을 누르거나 프로세스에 특정 인터페이스를 처리 할 수있을 것입니다 사용자 정의 펜더 만들 :
public interface IHaveManyFieldsToLog
{
public string[] GetAllPropertyValues()
}
public class ManyFieldsToLogAppender: SkeletonAppender
{
// pseudocode, I don't have the IDE at the moment
public override AppendLog(LogEvent event)
{
if (event.Parameter[0] as IHaveManyFieldsToLog != null)
{
var values = (event.Parameter[0] as IHaveManyFieldsToLog).GetAllPropertyValues();
// concat all values and push it to the log
}
}
}
확인을하지만 일치 내 요구 사항 같아. 그것의 이름이 동적 인 5000 개의 값을 추가하고 싶을 때와 같이, 어플리케이션이 실행될 때 설정됩니다. log4net.config에서 우리는 일반적으로 그 이름을 넣지 만 5000 값을 넣는 것이 동적으로 놓일 수있는 방법이 있습니다 – NitinG
값이 개체에서 오는 경우 ToString 메서드 (또는 다른 일반적인 메서드 예를 들어 인터페이스에서) 객체의 각 유형에 대한 특정 값을 덤프합니다. 메소드 출력을 로깅하거나 이러한 객체를 사용자 정의 방식으로 처리하는 사용자 정의 appender를 작성하십시오. 두 번째 편집 – samy
편집을 참조하십시오. 나는 PatternLayout 클래스를 재정의 (override)하고 그에 따라 모든 속성과 값을 푸시했다. 처음에는 괜찮은 것처럼 보이지만, 복잡한 복잡한 것들을 구현해야 할 때 어떻게 움직이는 지 알 수 있습니다. – NitinG