이 질문은 이전 질문에 대한 새로운 대답이지만 다른 사람에게 도움이 될 수 있습니다.
내 로그 파일에 긴 석영 스레드 이름 [DefaultQuartzScheduler_Worker-1]을 좋아하지 않았습니다.
대신 스레드 ID를 표시하기 위해 log4net을 원했습니다. 따라서 현재 스레드의 ID를 기록하는 속성을 설정해야합니다.
이 클래스를 발견했습니다.
이 source 로깅 계산 컨텍스트의 람다/FUNC의 방법입니다 : log4net context explained
public class Log4NetContextProperty : IFixingRequired
{
private readonly Func<string> _getValue;
public Log4NetContextProperty(Func<string> getValue)
{
_getValue = getValue;
}
public override string ToString()
{
return _getValue();
}
public object GetFixedObject()
{
return ToString();
}
}
그리고 당신은 장소를 시작 응용 프로그램에서이 방법으로 호출해야합니다.
log4net.GlobalContext.Properties["threadId"] = new Log4NetContextProperty(() => Thread.CurrentThread.ManagedThreadId.ToString());
그런 다음 log4net 구성에서 새 속성을 포함하도록 conversionpattern을 조정하십시오. 광산은 다음과 같습니다 : 그것 뿐이다
<conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" />
합니다. 이렇게하면 각 스레드의 ID는 런타임에 결정되고 자체 속성에 기록됩니다.
네, 순전히 디버그 목적으로 사용하고 있습니다. 또한이 스레드 (atleast prefixes)의 이름을 지정하면 나중에 무언가가 잘못되었을 때 로그를 감사하는 데 도움이됩니다. – asyncwait