Фон: Я написал общую библиотеку ведения журнала в .NET 3.5. В основном разработчик должен вызвать метод Begin() в начале своего метода и метод End() в конце его. Эти методы не принимают параметр - библиотека использует стек, чтобы выяснить, откуда она взялась. В библиотеке есть коллекция, которая отслеживает стек вызовов и записывает прошедшее время каждого метода.Уникальная ценность в StackTrace?
Это работает очень хорошо, и я доволен им.
Но теперь мы хотим добавить его на сервер. Когда несколько пользователей находятся в системе, есть только один файл журнала, а следы стека объединяются вместе. Невозможно определить, какой поток работает.
Мой вопрос заключается в следующем:
Есть ли способ, чтобы получить уникальное значение из класса StackTrace или indivdual StackFrame? Как насчет использования рефлексии? Я хотел бы иметь возможность создавать отдельный файл для каждого пользователя. По крайней мере, я хотел бы отметить каждую строку уникальным значением, чтобы мы могли фильтровать файл по этому значению при просмотре трасс.
Мы используем WCF TcpBinding как наш протокол связи на стороне сервера, если это помогает. Я ищу идентификатор потока, hashcode, адрес, что-то, чтобы отличить, откуда пришел стек вызовов.
Любые идеи?
Спасибо.
Yep - 'Thread.CurrentThread.ManagedThreadId' должен сделать это красиво. –
Это сработало для меня. Кроме того, я нашел свойство MethodBase.MethodHandle, которое я использую в сочетании с ManagedThreadId. Благодаря! – msawtatn