Ошибка записи лога при перезапуске стратегии

Ошибка записи лога при перезапуске стратегии
Atom
2/26/2013
VassilSanych


Стратегия не отпускает файл лога после остановки и при последующем старте мешает его открытию.
Code
2013/02/26 12:59:28.271|       |SS_RIH3@RTS_SPBFUT00066|Стратегия остановлена. [0,-1]. Позиция при старте 0.
2013/02/26 12:59:28.271|       |StrategyManager|Status:Stopped, PnL:-110, Slippage:-70, Position:0, Latency:00:00:01.1456274, ProcessState
2013/02/26 12:59:28.271|       |QuikManager|265 Заявка 45101234/2007094247 Продажа Цена=152720 Объем=1 Сост=Done Бал=0
2013/02/26 12:59:28.272|       |QuikManager|265 Заявка 45101234/2007094247 Продажа Цена=152720 Объем=1 Сост=Done Бал=0
2013/02/26 12:59:43.745|       |StrategyManager|Status:Started, PnL:0, Slippage:0, Position:0, Latency:00:00:00, StartedTime
2013/02/26 12:59:43.745|       |SS        |Стратегия запущена. [0,-1]. Позиция при старте 0.
2013/02/26 12:59:41.204|Error  |VgnRobot.App|System.IO.IOException: Процесс не может получить доступ к файлу "E:\Projects\VGnRobot1\Robot\bin\x86\Debug\SS 20130226.txt", так как этот файл используется другим процессом.
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
   в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
   в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
   в StockSharp.Logging.FileLogListener.OnCreateWriter(String fileName) в e:\Projects\C_Projects\StockSharp\Sources\Logging\FileLogListener.cs:строка 264
   в StockSharp.Logging.FileLogListener.<>c__DisplayClass2.<>c__DisplayClass4.<OnWriteMessages>b__1(Tuple`2 key) в e:\Projects\C_Projects\StockSharp\Sources\Logging\FileLogListener.cs:строка 292
   в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler, Boolean& isNew) в e:\Ecng\trunk\Collections\CollectionHelper.cs:строка 479
   в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler) в e:\Ecng\trunk\Collections\CollectionHelper.cs:строка 456
   в StockSharp.Logging.FileLogListener.<>c__DisplayClass2.<OnWriteMessages>b__0(LogMessage m) в e:\Projects\C_Projects\StockSharp\Sources\Logging\FileLogListener.cs:строка 292
   в System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   в System.Linq.GroupedEnumerable`3.GetEnumerator()
   в System.Linq.Parallel.ParallelEnumerableWrapper`1.GetEnumerator()
   в StockSharp.Logging.FileLogListener.OnWriteMessages(IEnumerable`1 messages) в e:\Projects\C_Projects\StockSharp\Sources\Logging\FileLogListener.cs:строка 285
   в StockSharp.Logging.LogListener.WriteMessages(IEnumerable`1 messages) в e:\Projects\C_Projects\StockSharp\Sources\Logging\LogListener.cs:строка 94
   в StockSharp.Logging.LogManager.<>c__DisplayClass2.<Flush>b__1(ILogListener l) в e:\Projects\C_Projects\StockSharp\Sources\Logging\LogManager.cs:строка 106
   в Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action) в e:\Ecng\trunk\Collections\CollectionHelper.cs:строка 108
   в StockSharp.Logging.LogManager.Flush() в e:\Projects\C_Projects\StockSharp\Sources\Logging\LogManager.cs:строка 106
   в Ecng.Common.ThreadingHelper.<>c__DisplayClass1.<Timer>b__0(Object s) в d:\Projects\StockSharp.com\Ecng\trunk\Common\ThreadingHelper.cs:строка 15
   в System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
   в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.TimerQueueTimer.CallCallback()
   в System.Threading.TimerQueueTimer.Fire()
   в System.Threading.TimerQueue.FireNextTimers()
   в System.Threading.TimerQueue.AppDomainTimerCallback()

Tags:


Thanks:


VassilSanych

Avatar
Date: 2/26/2013
Reply


Проехали.
Мой косяк.
Старую стратегию останавливаю, но не убиваю.
Надо жёстко убивать и обрубать концы диспозом :)
Thanks:

ra81

Avatar
Date: 2/26/2013
Reply


VassilSanych
Проехали.
Мой косяк.
Старую стратегию останавливаю, но не убиваю.
Надо жёстко убивать и обрубать концы диспозом :)


Вообще правильнее было бы закрывать лог файл после остановки в том месте где логгинг идет. А не изобретать велосипед путем убийства стратегии итд.
Thanks:

VassilSanych

Avatar
Date: 2/26/2013
Reply


ra81
Вообще правильнее было бы закрывать лог файл после остановки в том месте где логгинг идет. А не изобретать велосипед путем убийства стратегии итд.

Если стратегию не убивать, то и лог пересоздавать вообще не надо (когда логмэнеджер - свойство стратегии).
Но у меня логика динамической подгрузки библиотек с преднастроенными стратегиями при старте.
А для этого их надо пересоздавать.

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy