← Zurück

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

Стратегия не отпускает файл лога после остановки и при последующем старте мешает его открытию.

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()

Kommentare (3)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

VassilSanych
VassilSanych Autor

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

ra81
ra81

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

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

VassilSanych
VassilSanych Autor

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