У меня есть веб-сервис с сотнями одновременных пользователей, у меня есть статический класс ведения журналов для регистрации ошибок, которые возникают. Мне нужно отслеживать UserID в журнале, который изначально не отслеживался.Отслеживание UserID в журнале регистрации исключений
Этот звук очень прост, потому что я мог просто передать UserID в вызов функции Logger, но поскольку это устаревшая система, я не могу изменить параметр вызова. Я могу добавить код, когда сначала запускается программа, или внутри самого журнала, но для изменения каждой сигнатуры вызова не может быть и речи.
Как получить идентификатор пользователя в журнале, не переходя к нему в каждом вызове журнала?
Вот моя текущая функция и то, что моя проблема:
public static class Log
{
public static void Error(object message, Exception ex)
{
log.Error(message, ex);
IDictionary customData = new Dictionary<string, string>() {{"message", message.ToString()}};
customData.Add("UserID",???????);
DoLogging(ex, customData);
}
}
Вот пустяки решение, которое я не могу использовать:
public static class Log
{
public static void Error(object message, Exception ex, int userID)
{
log.Error(message, ex);
IDictionary customData = new Dictionary<string, string>() {{"message", message.ToString()}};
customData.Add("UserID", userID.ToString());
DoLogging(ex, customData);
}
}
Одним из возможных решений заключается в сохранении определенного типа статической переменной в классе Logger, но помните, что этот класс является статическим, и может быть сотни одновременных экземпляров, как я могу указать, какой экземпляр вызывает регистратор?
public static class Log
{
private static concurrent DataStrucutre userIDs;
public static void Error(object message, Exception ex)
{
log.Error(message, ex);
IDictionary customData = new Dictionary<string, string>() {{"message", message.ToString()}};
customData.Add("UserID",userIDs[????]);
DoLogging(ex, customData);
}
}
Если вы не хотите передавать его в каждом вызове, существует ли еще один способ для получения * идентификатора пользователя *? В таком случае, что это? В противном случае я не вижу, как журнал мог бы получить его без изменения уже существующей кодовой базы ... – skypjack
Ну, есть определенная функция, которая может получить текущий идентификатор пользователя, заданный НИЧЕГО, но как статический Logger предположил, что пользователь получить только с Исключением? – Bill
Вы можете обернуть код так, как будто это критический раздел, таким образом контролируя, кто и как к нему обращается журнал, если идентификатор пользователя тесно связан с текущим потоком. Не уверен, что это работает, я думаю, что многие детали упущены, чтобы определить правильное решение, извините ... – skypjack