내 응용 프로그램이 몇 가지 로그를 남길 수있는 별도의 스레드를 만들어야하며 작업을 사용하도록 제안되었습니다.작업에 작업 사용 - 작동 방법을 모르는 경우
나는이 일을 완전히 이해하지 못하기 때문에 나는이 권리가없는 것처럼 보인다. 내가 잘못 뭐하는 거지
public static void LogException(string message, Exception ex)
{
Action action= delegate() { logException(message, ex); };
new Task(action);
}
public static void logException(string message, Exception ex)
{
var stackTrace = new StackTrace();
var origin = stackTrace.GetFrame(1).GetMethod().Name;
var originclass = stackTrace.GetFrame(1).GetMethod().ReflectedType.Name;
var neworigin = string.Format("{0}.{1}", originclass, origin);
message += Environment.NewLine + Environment.NewLine + GetFullExceptionMessage(ex);
if (string.IsNullOrEmpty(message)) message = "No message given";
//var exceptions = GetAllErrMessages(ex);
//message = exceptions.Aggregate(message, (current, exception) => current + Environment.NewLine + exception);
EventLogging.LogEvent(neworigin, message, EventLogEntryType.Error, 9999);
EmailMessage(neworigin, message, EventLogEntryType.Error);
}
: 여기
내가 가진 무엇인가? 나는 어떤 에러도 내지 않고 있지만 다시는 로그를 얻지 못한다.
감사합니다.
좋아요! 효과가있었습니다. 또한, 오버 헤드에 대한 언급에서 이벤트 로깅 및/또는 이메일 오버 헤드가 오버 헤드가되지 않을까요? 내가 어떻게 알 겠어? 도와 주셔서 감사합니다! – ErocM
@ErocM 글쎄, 모든 LogEvent 메서드를 그냥 목록에 문자열을 저장하거나 자체 백그라운드에서 로깅을 할 수있는 자신의 스레드를 만듭니다 알아요. 또한, 그냥 파일에 쓰는 경우, 버퍼링/캐싱/etc 덕택입니다. 항상 느린 것은 아닙니다. 실제로 알고 자한다면, 믿을만한'StopWatch'를 깨뜨리고 어느 것이 더 오래 걸릴지 (평균적으로 많은 수의 반복에 걸쳐) 실행하기를 원할 것입니다. – Servy
그건 내가 한 짓이야. 도움을 다시 주셔서 감사합니다! – ErocM