示例#1
0
 public static void Roll(LogsFileDatabaseEntry dbe)
 {
     dbe.ProcessedFile = false;
     dbe.LastPosition  = 0;
     dbe.Previous      = "";
     Instance.UpdateEntry(dbe, 0);
     dbe.NewFile = true;
 }
示例#2
0
        private void UpdateEntry(LogsFileDatabaseEntry dbe, long lastOffset)
        {
            lock (_locker)
            {
                var fi = new FileInfo(dbe.FileName);
                dbe.NewFile         = !fi.Exists;
                dbe.CreationTimeUtc = fi.CreationTimeUtc;
                dbe.SampleTime      = DateTime.UtcNow;
                dbe.LastPosition    = lastOffset;

                WriteDatabaseFileNoLock();
            }
        }
示例#3
0
        private LogsFileDatabaseEntry AddFileEntry(string logName)
        {
            var de = new LogsFileDatabaseEntry();

            lock (_locker)
            {
                var fi = new FileInfo(logName);
                de.FileName        = logName;
                de.LogFileExists   = fi.Exists;
                de.Previous        = "";
                de.NewFile         = true;
                de.ProcessedFile   = false;
                de.LastPosition    = fi.Length;
                de.SampleTime      = DateTime.UtcNow;
                de.CreationTimeUtc = fi.CreationTimeUtc;

                Entries.Add(de);
                WriteDatabaseFileNoLock();
            }
            return(de);
        }
示例#4
0
        public static LogsFileDatabaseEntry LookupLogFile(string logName)
        {
            LogsFileDatabaseEntry dbe = Instance.FindFile(logName);

            if (dbe == null)
            {
                dbe = Instance.AddFileEntry(logName);
            }

            FileInfo fi = new FileInfo(logName);

            dbe.LogFileExists = fi.Exists;
            var creationTime = fi.CreationTimeUtc;

            if (dbe.LogFileExists && creationTime != dbe.CreationTimeUtc)
            {
                dbe.NewFile  = true;
                dbe.Previous = "";
            }
            dbe.CreationTimeUtc = creationTime;

            return(dbe);
        }
示例#5
0
 public static void Update(LogsFileDatabaseEntry dbe, bool processedFile, long lastOffset)
 {
     dbe.ProcessedFile = processedFile;
     dbe.LogFileExists = File.Exists(dbe.FileName);
     Instance.UpdateEntry(dbe, lastOffset);
 }
        private void UpdateEntry(LogsFileDatabaseEntry dbe, long lastOffset)
        {
            lock (_locker)
            {
                var fi = new FileInfo(dbe.FileName);
                dbe.NewFile = !fi.Exists;
                dbe.CreationTimeUtc = fi.CreationTimeUtc;
                dbe.SampleTime = DateTime.UtcNow;
                dbe.LastPosition = lastOffset;

                WriteDatabaseFileNoLock();
            }
        }
        private LogsFileDatabaseEntry AddFileEntry(string logName)
        {
            var de = new LogsFileDatabaseEntry();
            lock (_locker)
            {
                var fi = new FileInfo(logName);
                de.FileName = logName;
                de.LogFileExists = fi.Exists;
                de.Previous = "";
                de.NewFile = true;
                de.ProcessedFile = false;
                de.LastPosition = fi.Length;
                de.SampleTime = DateTime.UtcNow;
                de.CreationTimeUtc = fi.CreationTimeUtc;

                Entries.Add(de);
                WriteDatabaseFileNoLock();
            }
            return de;
        }
 public static void Update(LogsFileDatabaseEntry dbe, bool processedFile, long lastOffset)
 {
     dbe.ProcessedFile = processedFile;
     dbe.LogFileExists = File.Exists(dbe.FileName);
     Instance.UpdateEntry(dbe, lastOffset);
 }
 public static void Roll(LogsFileDatabaseEntry dbe)
 {
     dbe.ProcessedFile = false;
     dbe.LastPosition = 0;
     dbe.Previous = "";
     Instance.UpdateEntry(dbe, 0);
     dbe.NewFile = true;
 }
示例#10
0
        private void TailFileContents(string fileName, long offset, LogsFileDatabaseEntry dbe)
        {
            const int bufSize = 16535;
            long      prevLen = offset;

            FileInfo fi = new FileInfo(fileName);

            if (!fi.Exists)
            {
                return;
            }

            LogManager.GetCurrentClassLogger().Trace(":{0} Tailing File: {1} as Pos: {2}", Thread.CurrentThread.ManagedThreadId, fileName, prevLen);

            using (var stream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))
            {
                stream.Seek(prevLen, SeekOrigin.Begin);

                char[]        buffer  = new char[bufSize];
                StringBuilder current = new StringBuilder();
                using (StreamReader sr = new StreamReader(stream))
                {
                    int nRead;
                    do
                    {
                        // Read a buffered amount
                        nRead = sr.ReadBlock(buffer, 0, bufSize);
                        for (int i = 0; i < nRead; ++i)
                        {
                            // We need the terminator!
                            if (buffer[i] == '\n' || buffer[i] == '\r')
                            {
                                if (current.Length > 0)
                                {
                                    string line = string.Concat(dbe.Previous, current);
                                    var    json = new JObject();

                                    if (json["logSource"] == null)
                                    {
                                        if (string.IsNullOrEmpty(_arguments.LogSource))
                                        {
                                            json.Add(new JProperty("logSource", fileName));
                                        }
                                        else
                                        {
                                            json.Add(new JProperty("logSource", _arguments.LogSource));
                                        }
                                    }

                                    //LogManager.GetCurrentClassLogger().Debug(":{0} File: {1}:{2}  {3}", Thread.CurrentThread.ManagedThreadId, fileName, dbe.LinesProcessed, line);

                                    // We've processed the partial input
                                    dbe.Previous        = "";
                                    json["Text"]        = line;
                                    json["Index"]       = dbe.LinesProcessed;
                                    json["LogFileName"] = fileName;
                                    if (_codecArguments != null && _codecArguments.Type == CodecArguments.CodecType.multiline)
                                    {
                                        try
                                        {
                                            _codec.Apply(line, this);
                                            Interlocked.Increment(ref _receivedMessages);
                                            dbe.IncrementLineCount();
                                        }
                                        catch (Exception ex)
                                        {
                                            Interlocked.Increment(ref _errorCount);
                                            LogManager.GetCurrentClassLogger().ErrorException("Filter Error", ex);
                                        }
                                    }
                                    else
                                    {
                                        try
                                        {
                                            ProcessJson(json);
                                            dbe.IncrementLineCount();
                                            Interlocked.Increment(ref _receivedMessages);
                                            LogsFileDatabase.Update(dbe, true, sr.BaseStream.Position);
                                        }
                                        catch (Exception ex)
                                        {
                                            Interlocked.Increment(ref _errorCount);
                                            LogManager.GetCurrentClassLogger().ErrorException("Process Error", ex);
                                        }
                                    }
                                }
                                current = new StringBuilder();
                            }
                            else // Copy character into the buffer
                            {
                                current.Append(buffer[i]);
                            }
                        }
                    } while (nRead > 0);

                    // We didn't encounter the newline, so save it.
                    if (current.Length > 0)
                    {
                        dbe.Previous = current.ToString();
                    }
                }
            }
        }
        private void TailFileContents(string fileName, long offset, LogsFileDatabaseEntry dbe)
        {
            const int bufSize = 16535;
            long prevLen = offset;

            FileInfo fi = new FileInfo(fileName);
            if (!fi.Exists)
                return;

            LogManager.GetCurrentClassLogger().Trace(":{0} Tailing File: {1} as Pos: {2}", Thread.CurrentThread.ManagedThreadId, fileName, prevLen);

            using (var stream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))
            {
                stream.Seek(prevLen, SeekOrigin.Begin);

                char[] buffer = new char[bufSize];
                StringBuilder current = new StringBuilder();
                using (StreamReader sr = new StreamReader(stream))
                {
                    int nRead;
                    do
                    {
                        // Read a buffered amount
                        nRead = sr.ReadBlock(buffer, 0, bufSize);
                        for (int i = 0; i < nRead; ++i)
                        {
                            // We need the terminator!
                            if (buffer[i] == '\n' || buffer[i] == '\r')
                            {
                                if (current.Length > 0)
                                {
                                    string line = string.Concat(dbe.Previous, current);
                                    var json = new JObject();

                                    if (json["logSource"] == null)
                                    {
                                        if (string.IsNullOrEmpty(_arguments.LogSource))
                                            json.Add(new JProperty("logSource", fileName));
                                        else
                                            json.Add(new JProperty("logSource", _arguments.LogSource));
                                    }

                                    //LogManager.GetCurrentClassLogger().Debug(":{0} File: {1}:{2}  {3}", Thread.CurrentThread.ManagedThreadId, fileName, dbe.LinesProcessed, line);

                                    // We've processed the partial input
                                    dbe.Previous = "";
                                    json["Text"] = line;
                                    json["Index"] = dbe.LinesProcessed;
                                    json["LogFileName"] = fileName;
                                    if (_codecArguments != null && _codecArguments.Type == CodecArguments.CodecType.multiline)
                                    {
                                        try
                                        {
                                            _codec.Apply(line, this);
                                            Interlocked.Increment(ref _receivedMessages);
                                            dbe.IncrementLineCount();
                                        }
                                        catch (Exception ex)
                                        {
                                            Interlocked.Increment(ref _errorCount);
                                            LogManager.GetCurrentClassLogger().ErrorException("Filter Error", ex);
                                        }
                                    }
                                    else
                                    {
                                        try
                                        {
                                            ProcessJson(json);
                                            dbe.IncrementLineCount();
                                            Interlocked.Increment(ref _receivedMessages);
                                            LogsFileDatabase.Update(dbe, true, sr.BaseStream.Position);
                                        }
                                        catch (Exception ex)
                                        {
                                            Interlocked.Increment(ref _errorCount);
                                            LogManager.GetCurrentClassLogger().ErrorException("Process Error", ex);
                                        }
                                    }

                                }
                                current = new StringBuilder();
                            }
                            else // Copy character into the buffer
                            {
                                current.Append(buffer[i]);
                            }
                        }
                    } while (nRead > 0);

                    // We didn't encounter the newline, so save it.
                    if (current.Length > 0)
                    {
                        dbe.Previous = current.ToString();
                    }
                }
            }
        }