Esempio n. 1
0
        // 락이 없는 함수로 푸시 말고는 쓰기 동작이 없어야 한다.
        // Stop이 불리고 나서도 로그가 푸시될 수 있는 것을 감안한다(이런 로그는 Stop에서 처리).
        private Int64 PushImpl(String type, Object log, Boolean doSerialize)
        {
            try
            {
                if (CheckAvailablePush(type, log) == false)
                {
                    return(INVALID_SEQUENCE);
                }

                DateTime now         = Now.NowDateTime();
                Int64    sequence    = _sequenceGenerator.Generate();
                Boolean  successPush = _logQueue.Push(new Log()
                {
                    Sequence    = sequence,
                    LogType     = type,
                    LogObject   = log,
                    TimeStamp   = Now.TimestampSec(now),
                    TimeStampNS = Now.TimestampNS(now),
                    IsRawString = doSerialize
                });

                if (successPush)
                {
                    Watcher.IncrementPushLogCount();
                    return(sequence);
                }

                return(INVALID_SEQUENCE);
            }
            catch (Exception exception)
            {
                ErrorCounter.RaiseError($"Fail Push: {exception.Message}");
                return(INVALID_SEQUENCE);
            }
        }