Я использую log4net в классе с несколькими потоками, и у меня возник простой вопрос. Нужно ли вводить блокировку чтения / записи при проверке свойств и вызове методов в интерфейсе log4net.ILog?
Я использую предложенный метод из примеров log4net, поэтому в верхней части указанного класса у меня есть:
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(decType)
И так как класс включает в себя несколько потоков, взаимодействующих с ним, у меня есть экземпляр ReaderWriterLockSlim
, который я использую, чтобы убедиться, что я не попадаю в условия гонки со своими переменными. Напомним, что если я хочу убедиться, что я практикую безопасную многопоточность, нужно ли мне сделать что-то вроде этого:
If Me.ReaderWriterLockSlim.TryEnterUpgradableReadLock(-1) Then
If log.IsWarnEnabled Then
If Me.ReaderWriterLockSlim.TryEnterWriteLock(-1) Then
log.Warn("Log Message Here")
Me.ReaderWriterLockSlim.ExitWriteLock()
End If
End If
Me.ReaderWriterLockSlim.ExitUpgradeableReadLock()
End If
Или я могу просто сделать это:
If log.IsWarnEnabled Then log.Warn("Log Message Here")
P.S. Да, это грубый псевдокод, на самом деле у меня нет экземпляра ReaderWriterLockSlim
, который называется 'ReaderWriterLockSlim'.