예제 #1
0
파일: Program.cs 프로젝트: bogosoft/logrot
        static void Execute(Parameters parameters)
        {
            string       line;
            StreamWriter output = null;

            var buffer   = new StringBuilder();
            var logstart = parameters.LogStart;
            var rotation = GetRotationInfo(parameters);

            Logger.Info("Log rotation started.");

            Logger.Debug($"Input Encoding: {Console.InputEncoding.EncodingName}");
            Logger.Debug($"Full Destination Path: {rotation.FullPath}");
            Logger.Debug($"Destination Directory: {rotation.Directory}");
            Logger.Debug($"Log File Name: {rotation.Name}");
            Logger.Debug($"Log File Extension: {rotation.Extension}");
            Logger.Debug($"Log entries start with: '{logstart.ToString().Substring(1)}'");
            Logger.Debug($"Maximum File Size (bytes): {parameters.FileSize}");

            try
            {
                output = Open(parameters);

                while ((line = Console.In.ReadLine()) != null)
                {
                    if (line.Length == 0)
                    {
                        continue;
                    }

                    if (output.BaseStream.Length > parameters.FileSize)
                    {
                        output.Dispose();

                        Rotate(parameters, rotation);

                        output = Open(parameters);
                    }

                    if (logstart.IsMatch(line))
                    {
                        output.Write(buffer);

                        output.Flush();

                        buffer.Clear();
                    }

                    buffer.Append(line + Environment.NewLine);
                }

                output.Write(buffer);
            }
            finally
            {
                output?.Dispose();
            }
        }