/// <summary> /// Creates a list of Tailor objects. Each one can /// be used to tail a file. /// </summary> /// <param name="param"></param> /// <returns></returns> public static List <Tailor> Create(FilesystemParameter param, Settings settings) { sleepTime = settings.RefreshTime; Console.WriteLine("> Set sleep time to: " + sleepTime); List <Tailor> tailors = new List <Tailor>(); foreach (FileSystemInfo fsInfo in param.FilesystemObjects) { if (fsInfo is FileInfo) { tailors.Add(new Tailor(fsInfo as FileInfo, settings.LineCount)); } if (fsInfo is DirectoryInfo) { foreach (FileInfo fileInDir in (fsInfo as DirectoryInfo).GetFiles("*.*", SearchOption.TopDirectoryOnly)) { tailors.Add(new Tailor(fileInDir, settings.LineCount)); } } } return(tailors); }
static void Main(string[] args) { #if DEBUG // Start 2 concurrent writers for log files in debugFolder/logs Writer w = new Writer(); w.Run(); #endif Console.WriteLine(); if (args.Length == 0) { Settings.PrintHelp(); return; } // Parse config flags and slice them from command line args Settings settings = new Settings(); try { args = settings.SliceConfigFlags(args); } catch (Exception ex) { Console.WriteLine("ERROR: " + ex.Message + Environment.NewLine); return; } // Check arguments and check if they are valid filesystem arguments FilesystemParameter param = new FilesystemParameter(); param.TryParse(args); // No need to go on with an empty list if (param.IsEmpty) { Console.WriteLine("No valid arguments given. Exiting ..."); return; } // Create a list of tail watchers List <Tailor> tailors = Tailor.Create(param, settings); if (tailors.Count == 0) { throw new ArgumentException("Error creating tailors!"); } List <Task> tailTasks = StartTaskForEveryTailor(tailors); // Prevents exit while there are still pending tasks // and rechecks every ~2 secs while (tailTasks.Any((t) => t.Status == TaskStatus.Running || t.Status == TaskStatus.WaitingToRun)) { Thread.Sleep(2000); } Console.WriteLine(Environment.NewLine + "Exiting LogTailor ... ByeBye!"); }