public void Test_Append_NewFile()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var dataDirectory = Path.GetFullPath (".data");

            var folderName = "TestFolder";

            var fileName = "TestFile.txt";

            var deviceKey = "deviceKey";

            var text = "Hello world!";

            var appender = new FileAppender (dataDirectory, folderName, deviceKey);

            Console.WriteLine ("");
            Console.WriteLine ("Executing test");
            Console.WriteLine ("");

            appender.Append (fileName, text);

            Console.WriteLine ("");
            Console.WriteLine ("Analysing test");
            Console.WriteLine ("");

            var filePath = Path.Combine (dataDirectory, folderName + "/" + fileName);

            var fileContents = File.ReadAllLines (filePath);

            Assert.AreEqual (1, fileContents.Length);
        }
        static void Main()
        {
            var simpleLayout = new SimpleLayout();

            var consoleAppender = new ConsoleAppender(simpleLayout);
            var fileAppender = new FileAppender(simpleLayout);
            fileAppender.LogFile = "log.txt";

            var errorLog = new Log(new Level("Error"), "Error parsing JSON.");
            var infoLog = new Log(new Level("Info"), string.Format("User {0} successfully registered.", "Pesho"));
            var warnLog = new Log(new Level("Warning"), "Warning - missing files.");

            var logger = new Models.Logger(new List<IAppender> { consoleAppender, fileAppender });
            logger.AppendLog(errorLog);
            logger.AppendLog(infoLog);
            logger.AppendLog(warnLog);

            //xml Logger
            var xmlLayout = new XmlLayout();
            var consoleXmlAppender = new ConsoleAppender(xmlLayout);
            var xmlLogger = new Models.Logger(new List<IAppender>{consoleXmlAppender});

            var fatalLog = new Log(new Level("Fatal"), "mscorlib.dll does not respond");
            var criticalLog = new Log(new Level("Critical"), "No connection string found in App.config");

            xmlLogger.AppendLog(fatalLog);
            xmlLogger.AppendLog(criticalLog);
        }
Ejemplo n.º 3
0
        public static void Main()
        {
            ILayout simpleLayout = new SimpleLayout();
            IAppender consoleAppender = new ConsoleAppender(simpleLayout);

            var fileAppender = new FileAppender(simpleLayout);
            fileAppender.File = "../../log.txt";

            var logger = new Logger(consoleAppender, fileAppender);
            logger.Error("Error parsing JSON.");
            logger.Info(string.Format("User {0} successfully registered.", "Dobri"));
            logger.Warn("Warning - missing files.");

            var xmlLayout = new XmlLayout();
            consoleAppender = new ConsoleAppender(xmlLayout);
            logger = new Logger(consoleAppender);

            logger.Fatal("mscorlib.dll does not respond");
            logger.Critical("No connection string found in App.config");

            consoleAppender = new ConsoleAppender(simpleLayout);
            consoleAppender.ReportLevel = ReportLevel.Error;
            logger = new Logger(consoleAppender);

            logger.Info("Everything seems fine");
            logger.Warn("Warning: ping is too high - disconnect imminent");
            logger.Error("Error parsing request");
            logger.Critical("No connection string found in App.config");
            logger.Fatal("mscorlib.dll does not respond");
        }
Ejemplo n.º 4
0
 static void Main(string[] args)
 {
     IFormater formetter = new SimpleFormatter();
     IAppender appender = new FileAppender("file.txt",formetter);
     Logger logger = new Logger(appender);
     logger.Critical("Out of Memmory");
     logger.Info("Unused local Variable");
 }
Ejemplo n.º 5
0
 public PostFolderManager(string dataDirectory, string contentDirectory, string folderName, string securityKey)
 {
     DataDirectory = dataDirectory;
     ContentDirectory = contentDirectory;
     FolderId = folderName;
     SecurityKey = securityKey;
     Overwriter = new FileOverwriter (contentDirectory, folderName, securityKey);
     Appender = new FileAppender (contentDirectory, folderName, securityKey);
     Keys = new KeyManager (dataDirectory);
     Authentication = new Authenticator (Keys);
 }
Ejemplo n.º 6
0
        public static void Main()
        {
            var simpleLayout = new SimpleLayout();

            var consoleAppender = new ConsoleAppender(simpleLayout);
            var fileAppender = new FileAppender(simpleLayout);
            fileAppender.File = "log.txt";

            var logger = new Logger(consoleAppender, fileAppender);
            logger.Error("Error parsing JSON.");
            logger.Info(string.Format("User {0} successfully registered.", "Pesho"));
            logger.Warn("Warning - missing files.");
        }
Ejemplo n.º 7
0
        static void Main()
        {
            //Init dependencies
            ILayout layout = new XmlLayout();
            IAppender fileAppender = new FileAppender(layout, "file.txt");
            IAppender consoleAppender = new ConsoleAppender(layout);
            Logger logger = new Logger(consoleAppender);

            //shows every report level above ReportLevel.Warn
            consoleAppender.ReportLevel = ReportLevel.Fatal;

            logger.Critical("Critical Sample Report");
            logger.Fatal("Fatal Sample Report");
            logger.Info("Info Sample Report");
        }
Ejemplo n.º 8
0
        public static void Main()
        {
            ILayout simpleLayout = new SimpleLayout();
            IDataAppender consoleAppender =
                 new ConsoleAppender(simpleLayout);
            ILogger logger = new Logger(consoleAppender);

            logger.Error("Error parsing JSON.");
            logger.Info($"User {"Pesho"} successfully registered.");

            var fileAppender = new FileAppender(simpleLayout, "log.txt");
            logger = new Logger(fileAppender);
            logger.Error("Error parsing JSON.");
            logger.Info($"User {"Pesho"} successfully registered.");
            logger.Warn("Warning - missing files.");
        }
        static void Main(string[] args)
        {
            ILayout simpleLayout = new SimpleLayout();
            IAppender consoleAppender = new ConsoleAppender(simpleLayout);
            ILogger logger = new Logger(consoleAppender);

            logger.Error("Error parsing JSON");
            logger.Info(string.Format("User {0} successfully registered.", "Pesho"));

            Console.WriteLine(new string('-', 20));

            //We create a second Appender and add it to the existing ILogger object
            IFileAppender fileAppender = new FileAppender(simpleLayout);
            fileAppender.File = "log.txt";

            logger.AddAppender(fileAppender);

            logger.Fatal("mscorlib.dll does not respond");
            logger.Critical("No connection string found in App.config");

            Console.WriteLine(new string('-', 20));

            //We set the new XML Layout on each Appender that the Logger object uses
            foreach (IAppender appender in logger.Appenders)
            {
                appender.Layout = new XmlLayout();
            }

            logger.Fatal("mscorlib.dll does not respond");
            logger.Critical("No connection string found in App.config");

            Console.WriteLine(new string('-', 20));

            //We set the Report Level Minimum at Error
            foreach (IAppender appender in logger.Appenders)
            {
                appender.ReportLevelMinimum = Enums.ReportLevel.Error;
            }

            logger.Info("Everything seems fine");
            logger.Warning("Warning: ping is too high - disconnect imminent");
            logger.Error("Error parsing request");
            logger.Critical("No connection string found in App.config");
            logger.Fatal("mscorlib.dll does not respond");

            Console.WriteLine(new string('-', 20));
        }
Ejemplo n.º 10
0
        static void Main(string[] args)
        {
            var simpleLayout = new SimpleLayout();

            var consoleAppender = new ConsoleAppender(simpleLayout);
            consoleAppender.Threshold = ReportLevel.Error;

            var fileAppender = new FileAppender(simpleLayout);
            fileAppender.File = "log.txt";

            var logger = new Logger.Loggers.Logger(consoleAppender, fileAppender);
            logger.Info("Everything seems fine");
            logger.Warn("Warning: ping is too high - disconnect imminent");
            logger.Error("Error parsing request");
            logger.Critical("No connection string found in App.config");
            logger.Fatal("mscorlib.dll does not respond");
        }
        public void Test_Append_ExistingFile()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var dataDirectory = Path.GetFullPath (".data");

            Directory.CreateDirectory (dataDirectory);

            var folderName = "TestFolder";

            var folderPath = Path.Combine (dataDirectory, folderName);

            Directory.CreateDirectory (folderPath);

            var fileName = "TestFile.txt";

            var deviceKey = "deviceKey";

            var filePath = Path.Combine (dataDirectory, folderName + "/" + fileName);

            File.WriteAllText (filePath, "Line #1" + Environment.NewLine);

            var text = "Line #2";

            var appender = new FileAppender (dataDirectory, folderName, deviceKey);

            Console.WriteLine ("");
            Console.WriteLine ("Executing test");
            Console.WriteLine ("");

            appender.AppendLine (fileName, text);

            Console.WriteLine ("");
            Console.WriteLine ("Analysing test");
            Console.WriteLine ("");

            var fileContents = File.ReadAllLines (filePath);

            Assert.AreEqual (2, fileContents.Length);

            Assert.AreEqual (text, fileContents [1]);
        }
Ejemplo n.º 12
0
        private static void Main(string[] args)
        {
            ILayout simpleLayout = new SimpleLayout();
            
            //this is a client created layout implemented in the current project
            ILayout xmLayout = new XmLlayout();

            IAppender consoleAppender = new ConsoleAppender(simpleLayout);
            consoleAppender.ReportLevel = EntryLevel.Critical;

            IFileAppender fileAppender = new FileAppender(xmLayout);
            fileAppender.ReportLevel = EntryLevel.Info;
            fileAppender.File = "..\\..\\log.xml";

            ILogger logger = new Logger(consoleAppender, fileAppender);

            // NOTE: I have redesigned the logger class so that we can easily 
            // add additional levels of warnings (Debug for instance) without the need to edit the Logger class
            // Also I added a functionality to turn logging 'on' and 'off' without the need to comment or delete
            // existing logger.Log lines. Default value is 'on'.

            logger.IsLogging = false;

            logger.Log(EntryLevel.Info, "This is just an info message.");
            logger.Log(EntryLevel.Warning, "This is a warning.");
            logger.Log(EntryLevel.Error, "Error parsing JSON.");
            logger.Log(EntryLevel.Critical, "Situation is critical!");
            logger.Log(EntryLevel.Fatal, "Just Give Up");

            logger.IsLogging = true;

            logger.Log(EntryLevel.Info, "This is just an info message.");
            logger.Log(EntryLevel.Warning, "This is a warning.");
            logger.Log(EntryLevel.Error, "Error parsing JSON.");
            logger.Log(EntryLevel.Critical, "Situation is critical!");
            logger.Log(EntryLevel.Fatal, "Just Give Up");
        }
Ejemplo n.º 13
0
        public static void Main()
        {
            try
            {
                var simpleLayout = new SimpleLayout();
                var xmlLayout = new XmlLayout();

                IAppender consoleAppender = new ConsoleAppender(simpleLayout);
                IAppender fileAppender = new FileAppender(simpleLayout);
                fileAppender.File = "../../log.txt";

                IAppender fileAppenderXml = new FileAppender(xmlLayout);
                fileAppenderXml.File = "../../log.xml";

                ILogger logger = new Logger(consoleAppender, fileAppender, fileAppenderXml);
                
                // add in logs
                logger.Error("Error parsing JSON.");
                logger.Info(string.Format("User {0} successfully registered.", "Pesho"));
                logger.Warn("Warn - missing files.");
                logger.Fatal("mscorlib.dll does not respond");
                logger.Critical("No connection string found in App.config");

                logger.Info("Everything seems fine");
                logger.Warn("Warning: ping is too high - disconnect imminent");
                logger.Error("Error parsing request");
                logger.Critical("No connection string found in App.config");
                logger.Fatal("mscorlib.dll does not respond");
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex.Message);
            }
            
            Console.WriteLine();
        }
Ejemplo n.º 14
0
        // /R -> Reload avalaible Stations
        private static void Main(string[] args)
        {
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            hierarchy.Root.RemoveAllAppenders(); /*Remove any other appenders*/

            FileAppender fileAppender = new FileAppender();

            fileAppender.AppendToFile = true;
            fileAppender.LockingModel = new FileAppender.MinimalLock();
            fileAppender.File         = "log.txt";
            fileAppender.AppendToFile = false;
            PatternLayout pl = new PatternLayout();

            pl.ConversionPattern = "%d [%2%t] %-5p [%-10c]   %m%n%n";
            pl.ActivateOptions();
            fileAppender.Layout = pl;
            fileAppender.ActivateOptions();

            log4net.Config.BasicConfigurator.Configure(fileAppender);

            ILog _log = LogManager.GetLogger(typeof(Program));


            Facade   facade   = new Facade();
            Settings settings = Settings.GetInstance();

            _log.Info("Starting - getting available Stations");

            List <Station> availableStations;

            if (args.Contains("/R") || !File.Exists(settings.StationListPath) || DateTime.Now - new FileInfo(settings.StationListPath).LastWriteTime > new TimeSpan(settings.StationListUpdateIntervalDays, 0, 0, 0))
            {
                availableStations = facade.GetStations();
                File.WriteAllText(settings.StationListPath, JsonConvert.SerializeObject(availableStations, Formatting.Indented), Encoding.UTF8);
            }
            else
            {
                availableStations = JsonConvert.DeserializeObject <List <Station> >(File.ReadAllText(settings.StationListPath, Encoding.UTF8));
            }
            _log.Info("got available Stations");

            if (args.Contains("/addAll"))
            {
                settings.SenderDefinitions = availableStations.Select(s => s.DisplayName).ToList();
                Settings.SaveSettings();
                return;
            }

            List <int> idList = availableStations.Where(a => settings.SenderDefinitions.Contains(a.DisplayName)).Select(a => a.UID).ToList();

            if (idList.Count == 0)
            {
                Console.WriteLine("KEINE SENDER DEFINIERT");
                _log.Warn("KEINE SENDER DEFINIERT");
                return;
            }


            TmpOutput tmpOutPut;

            if (File.Exists(settings.TmpOutputPath))
            {
                tmpOutPut = JsonConvert.DeserializeObject <TmpOutput>(File.ReadAllText(settings.TmpOutputPath, Encoding.UTF8));
                List <ProgramInfo> toRemove = new List <ProgramInfo>();
                tmpOutPut.Programs.ForEach(p => { if (p.End.Date < DateTime.Now.Date)
                                                  {
                                                      toRemove.Add(p);
                                                  }
                                           });
                toRemove.ForEach(p => tmpOutPut.Programs.Remove(p));
                File.WriteAllText(settings.TmpOutputPath, JsonConvert.SerializeObject(tmpOutPut, Formatting.Indented), Encoding.UTF8);
            }
            else
            {
                tmpOutPut = new TmpOutput {
                    Programs = new List <ProgramInfo>(), Stations = new List <Station>()
                }
            };

            tmpOutPut.Stations = availableStations.Where(a => idList.Contains(a.UID)).ToList();

            DateTime mostRecent = DateTime.MinValue;

            tmpOutPut.Programs.ForEach(p => mostRecent = mostRecent < p.End ? p.End : mostRecent);


            for (int i = 0; i < settings.DaysToLoad; i++)
            {
                DateTime current = DateTime.Now.Date.AddDays(i);

                if (mostRecent.Date > current)
                {
                    continue;
                }
                _log.Info("Getting ProgramInfos for " + current.ToShortDateString());

                var programdatas = facade.GetChannelDatas(idList, current);

                foreach (var pd in programdatas)
                {
                    if (tmpOutPut.Programs.FirstOrDefault(w => w.EventId == pd.EventId) == null)
                    {
                        tmpOutPut.Programs.Add(pd);
                    }
                }
                File.WriteAllText(settings.TmpOutputPath, JsonConvert.SerializeObject(tmpOutPut, Formatting.Indented), Encoding.UTF8);
            }

            int count = tmpOutPut.Programs.Count(w => string.IsNullOrWhiteSpace(w.Description));
            int x     = 1;

            WriteXml(tmpOutPut, settings, _log);

            if (settings.GetDescriptions)
            {
                _log.Info("Getting Descriptions with " + settings.RequestsPerMinute + " requests per minute");
                foreach (var item in tmpOutPut.Programs.Where(w => string.IsNullOrWhiteSpace(w.Description)))
                {
                    try
                    {
                        Console.WriteLine("(" + x + "/" + count + ") Getting ProgramInfo for " + item.Name);
                        _log.Info("(" + x + "/" + count + ") Getting ProgramInfo for " + item.Name);
                        var details = facade.GetDescription(item.EventId);

                        item.Description = details.Description ?? "";
                        item.Category    = details.Genre ?? "";
                        Thread.Sleep(60000 / settings.RequestsPerMinute);
                    }
                    catch (Exception e)
                    {
                        _log.Error(e);
                        Thread.Sleep(60000);
                    }
                    if (x % 10 == 0)
                    {
                        File.WriteAllText(settings.TmpOutputPath, JsonConvert.SerializeObject(tmpOutPut, Formatting.Indented), Encoding.UTF8);
                    }
                    x++;
                }

                File.WriteAllText(settings.TmpOutputPath, JsonConvert.SerializeObject(tmpOutPut, Formatting.Indented), Encoding.UTF8);

                _log.Info("Got all data");
                Console.WriteLine("DONE Checking");

                WriteXml(tmpOutPut, settings, _log);
            }
            return;
            //TODO Add Icon to XMLTV
            //TODO MORE LOGGING
            //TODO COnfigure Logging
            //TODO MAIL ME IF NOT WORKING
            //TODO tmpoutput berreinigen
        }
Ejemplo n.º 15
0
        // deletePDFs based on ERP name
        public Boolean deletePDF(string fileName, string folder, ref string logMessage, ref string errMessage)
        {
            try
            {
                // set log file location
                XmlConfigurator.Configure();
                log4net.Repository.Hierarchy.Hierarchy h =
                    (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
                foreach (IAppender a in h.Root.Appenders)
                {
                    if (a is FileAppender)
                    {
                        FileAppender fa = (FileAppender)a;
                        // Programmatically set this to the desired location here
                        string logFileLocation = folder + "PDFPrint.log";

                        // Uncomment the lines below if you want to retain the base file name
                        // and change the folder name...
                        //FileInfo fileInfo = new FileInfo(fa.File);
                        //logFileLocation = string.Format(@"C:\MySpecialFolder\{0}", fileInfo.Name);

                        fa.File = logFileLocation;
                        fa.ActivateOptions();
                        break;
                    }
                }

                List <string> filesToDelete = new List <string>();
                string        baseFileName  = System.IO.Path.GetFileNameWithoutExtension(fileName);

                // get all the files relating to this ipt or iam
                filesToDelete = Directory.GetFiles(folder, baseFileName + "~*.pdf", SearchOption.AllDirectories).ToList();

                if (System.IO.File.Exists(folder + baseFileName + ".pdf"))
                {
                    filesToDelete.Add(Directory.GetFiles(folder, baseFileName + ".pdf", SearchOption.AllDirectories)[0]); // should only have one exact match
                }

                if (filesToDelete.Count > 0)
                {
                    //logMessage += @" " + "\r\n" + @" " + "Count of files: " + filesToDelete.Count() + @" " + "\r\n" + @" ";
                    log.Info(@" " + "\r\n" + @" " + "Count of files: " + filesToDelete.Count() + @" " + "\r\n" + @" ");


                    foreach (string f in filesToDelete)
                    {
                        //logMessage += "File to delete: " + f + @" " + "\r\n" + @" ";
                        log.Info("File to delete: " + f + @" " + "\r\n" + @" ");
                        if (System.IO.File.Exists(f))
                        {
                            System.IO.File.Delete(f);
                            //logMessage += "Deleted File " + f + @" " + "\r\n" + @" ";
                            log.Info("Deleted File " + f + @" " + "\r\n" + @" ");
                        }
                    }
                }
                else
                {
                    //logMessage += @" " + "\r\n" + @" " + "No File Found to Delete for " + fileName + @" " + "\r\n" + @" ";
                    log.Info(@" " + "\r\n" + @" " + "No File Found to Delete for " + fileName + @" " + "\r\n" + @" ");
                }

                return(true);
            }
            catch (Exception)
            {
                errMessage += "Cannot Delete File " + fileName + @" " + "\r\n" + @" ";
                return(false);
            }
        }
Ejemplo n.º 16
0
    static void CreateAppenderFromConfig(string appenderName)
    {
        if (string.IsNullOrEmpty(appenderName))
        {
            return;
        }

        string options = ConfigMgr.GetDefaultValue(appenderName, "");
        var    tokens  = new StringArray(options, ',');
        string name    = appenderName.Substring(9);

        if (tokens.Length < 2)
        {
            Console.WriteLine("Log.CreateAppenderFromConfig: Wrong configuration for appender {0}. Config line: {1}", name, options);
            return;
        }

        AppenderFlags flags = AppenderFlags.None;
        AppenderType  type  = (AppenderType)uint.Parse(tokens[0]);
        LogLevel      level = (LogLevel)uint.Parse(tokens[1]);

        if (level > LogLevel.Fatal)
        {
            Console.WriteLine("Log.CreateAppenderFromConfig: Wrong Log Level {0} for appender {1}\n", level, name);
            return;
        }

        if (tokens.Length > 2)
        {
            flags = (AppenderFlags)uint.Parse(tokens[2]);
        }

        byte id = NextAppenderId();

        switch (type)
        {
        case AppenderType.Console:
        {
            var appender = new ConsoleAppender(id, name, level, flags);
            appenders[id] = appender;
            break;
        }

        case AppenderType.File:
        {
            string filename;
            if (tokens.Length < 4)
            {
                if (name != "Server")
                {
                    Console.WriteLine("Log.CreateAppenderFromConfig: Missing file name for appender {0}", name);
                    return;
                }

                filename = Process.GetCurrentProcess().ProcessName + ".log";
            }
            else
            {
                filename = tokens[3];
            }

            appenders[id] = new FileAppender(id, name, level, filename, m_logsDir, flags);
            break;
        }

        case AppenderType.DB:
        {
            appenders[id] = new DBAppender(id, name, level);
            break;
        }

        default:
            Console.WriteLine("Log.CreateAppenderFromConfig: Unknown type {0} for appender {1}", type, name);
            break;
        }
    }
Ejemplo n.º 17
0
 public void Init()
 {
     Logs.AddAppender(FileAppender.GetAppender("debug.log"));
     Logs.SetMessageLevel <FileAppender>(LogMessageType.MSG_DEBUG);
 }
Ejemplo n.º 18
0
        // Handle all the automagical stuff
        //
        public ServicesServerBase(string prompt, string[] args)
        {
            // Save raw arguments
            //
            m_Arguments = args;

            // Read command line
            //
            ArgvConfigSource argvConfig = new ArgvConfigSource(args);

            argvConfig.AddSwitch("Startup", "console", "c");
            argvConfig.AddSwitch("Startup", "logfile", "l");
            argvConfig.AddSwitch("Startup", "inifile", "i");
            argvConfig.AddSwitch("Startup", "prompt", "p");
            argvConfig.AddSwitch("Startup", "logconfig", "g");

            // Automagically create the ini file name
            //
            string fileName  = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location);
            string iniFile   = fileName + ".ini";
            string logConfig = null;

            IConfig startupConfig = argvConfig.Configs["Startup"];

            if (startupConfig != null)
            {
                // Check if a file name was given on the command line
                //
                iniFile = startupConfig.GetString("inifile", iniFile);
                //
                // Check if a prompt was given on the command line
                prompt = startupConfig.GetString("prompt", prompt);
                //
                // Check for a Log4Net config file on the command line
                logConfig = startupConfig.GetString("logconfig", logConfig);
            }

            // Find out of the file name is a URI and remote load it
            // if it's possible. Load it as a local file otherwise.
            //
            Uri configUri;

            try
            {
                if (Uri.TryCreate(iniFile, UriKind.Absolute, out configUri) &&
                    configUri.Scheme == Uri.UriSchemeHttp)
                {
                    XmlReader r = XmlReader.Create(iniFile);
                    m_Config = new XmlConfigSource(r);
                }
                else
                {
                    m_Config = new IniConfigSource(iniFile);
                }
            }
            catch (Exception)
            {
                System.Console.WriteLine("Error reading from config source {0}",
                                         iniFile);
                Thread.CurrentThread.Abort();
            }

            // Merge the configuration from the command line into the
            // loaded file
            //
            m_Config.Merge(argvConfig);

            // Refresh the startupConfig post merge
            //
            if (m_Config.Configs["Startup"] != null)
            {
                startupConfig = m_Config.Configs["Startup"];
            }

            prompt = startupConfig.GetString("Prompt", prompt);

            // Allow derived classes to load config before the console is
            // opened.
            //
            ReadConfig();

            // Create main console
            //
            string consoleType = "local";

            if (startupConfig != null)
            {
                consoleType = startupConfig.GetString("console", consoleType);
            }

            if (consoleType == "basic")
            {
                MainConsole.Instance = new CommandConsole(prompt);
            }
            else if (consoleType == "rest")
            {
                MainConsole.Instance = new RemoteConsole(prompt);
                ((RemoteConsole)MainConsole.Instance).ReadConfig(Config);
            }
            else
            {
                MainConsole.Instance = new LocalConsole(prompt);
            }

            // Configure the appenders for log4net
            //
            OpenSimAppender consoleAppender = null;
            FileAppender    fileAppender    = null;

            if (logConfig != null)
            {
                FileInfo cfg = new FileInfo(logConfig);
                XmlConfigurator.Configure(cfg);
            }
            else
            {
                XmlConfigurator.Configure();
            }

            ILoggerRepository repository = LogManager.GetRepository();

            IAppender[] appenders = repository.GetAppenders();

            foreach (IAppender appender in appenders)
            {
                if (appender.Name == "Console")
                {
                    consoleAppender = (OpenSimAppender)appender;
                }
                if (appender.Name == "LogFileAppender")
                {
                    fileAppender = (FileAppender)appender;
                }
            }

            if (consoleAppender == null)
            {
                System.Console.WriteLine("No console appender found. Server can't start");
                Thread.CurrentThread.Abort();
            }
            else
            {
                consoleAppender.Console = MainConsole.Instance;

                if (null == consoleAppender.Threshold)
                {
                    consoleAppender.Threshold = Level.All;
                }
            }

            // Set log file
            //
            if (fileAppender != null)
            {
                if (startupConfig != null)
                {
                    string cfgFileName = startupConfig.GetString("logfile", null);
                    if (cfgFileName != null)
                    {
                        fileAppender.File = cfgFileName;
                        fileAppender.ActivateOptions();
                    }
                }
            }

            if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
            {
                CreatePIDFile(startupConfig.GetString("PIDFile"));
            }

            // Register the quit command
            //
            MainConsole.Instance.Commands.AddCommand("base", false, "quit",
                                                     "quit",
                                                     "Quit the application", HandleQuit);

            MainConsole.Instance.Commands.AddCommand("base", false, "shutdown",
                                                     "shutdown",
                                                     "Quit the application", HandleQuit);

            // Register a command to read other commands from a file
            MainConsole.Instance.Commands.AddCommand("base", false, "command-script",
                                                     "command-script <script>",
                                                     "Run a command script from file", HandleScript);


            // Allow derived classes to perform initialization that
            // needs to be done after the console has opened
            //
            Initialise();
        }
            internal void Open(IFileInfo fileInfo)
            {
                _appendStream = FileAppender.CreateAppendStream(fileInfo);

                ShouldEnsurePreamble = true;
            }
Ejemplo n.º 20
0
        public void Start()
        {
            var numberOfAppenders = int.Parse(Console.ReadLine());

            var appenders = new IAppender[numberOfAppenders];

            string[] inputParams = null;

            for (int i = 0; i < numberOfAppenders; i++)
            {
                inputParams = Console.ReadLine().Split();
                ILayout   layoutType   = null;
                IAppender appenderType = null;

                if (inputParams[1] == "SimpleLayout")
                {
                    layoutType = new SimpleLayout();
                }
                else if (inputParams[1] == "XmlLayout")
                {
                    layoutType = new XmlLayout();
                }

                if (inputParams[0] == "ConsoleAppender")
                {
                    appenderType = new ConsoleAppender(layoutType);
                }
                else if (inputParams[0] == "FileAppender")
                {
                    appenderType = new FileAppender(layoutType);
                }

                if (inputParams.Length == 3)
                {
                    var reportLevel = Enum.Parse <ReportLevel>(inputParams[2], true);
                    appenderType.ReportLevel = reportLevel;
                }

                appenders[i] = appenderType;
            }

            while (true)
            {
                inputParams = Console.ReadLine().Split('|').ToArray();

                if (inputParams[0] == "END")
                {
                    break;
                }

                var reportLevel = Enum.Parse <ReportLevel>(inputParams[0], true);
                var time        = inputParams[1];
                var message     = inputParams[2];

                foreach (var appender in appenders)
                {
                    if (appender.ReportLevel <= reportLevel)
                    {
                        appender.Append(time, reportLevel, message);
                    }
                }
            }

            foreach (var item in appenders)
            {
                Console.WriteLine(item.ToString());
            }
        }
Ejemplo n.º 21
0
        public void Act(int countOfAppenders)
        {
            IAppender[] appenders = new IAppender[countOfAppenders];

            for (int i = 0; i < countOfAppenders; i++)
            {
                var input = Console.ReadLine().Split();

                ILayout layout = null;

                switch (input[1])
                {
                case nameof(SimpleLayout):
                    layout = new SimpleLayout();
                    break;

                case nameof(XmlLayout):
                    layout = new XmlLayout();
                    break;

                default:
                    throw new ArgumentException();
                }

                IAppender appender = null;

                switch (input[0])
                {
                case nameof(ConsoleAppender):
                    appender = new ConsoleAppender(layout);
                    break;

                case nameof(FileAppender):
                    appender = new FileAppender(layout);
                    ((FileAppender)appender).File = new LogFile();
                    break;
                }

                if (input.Length == 3)
                {
                    ReportLevel level = (ReportLevel)Enum.Parse(typeof(ReportLevel), input[2]);
                    appender.ReportLevel = level;
                }

                appenders[i] = appender;
            }

            var logger = new Logger(appenders);

            string command;

            while ((command = Console.ReadLine()) != "END")
            {
                var input = command.Split('|');

                string time    = input[1];
                string message = input[2];

                ReportLevel level = (ReportLevel)Enum.Parse(typeof(ReportLevel), input[0]);

                switch (level)
                {
                case ReportLevel.CRITICAL:
                    logger.Critical(time, message);
                    break;

                case ReportLevel.ERROR:
                    logger.Error(time, message);
                    break;

                case ReportLevel.FATAL:
                    logger.Fatal(time, message);
                    break;

                case ReportLevel.INFO:
                    logger.Info(time, message);
                    break;

                case ReportLevel.WARNING:
                    logger.Warn(time, message);
                    break;
                }
            }

            Console.WriteLine(logger);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// This method is used to set up the log4net configuration files that will log the application.
        /// </summary>
        /// <param name="fileName">The name of the informatoin file.</param>
        private static void Setup(string fileName)
        {
            string logFilePath = "../../../Logs/";

            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            PatternLayout patternLayoutTC = new PatternLayout();

            patternLayoutTC.ConversionPattern = "%date [%level] - %message%newline";
            patternLayoutTC.ActivateOptions();

            RollingFileAppender testCaseRoller = new RollingFileAppender();

            testCaseRoller.AppendToFile       = false;
            testCaseRoller.File               = string.Format("{0}logfile-{1}-{2}.log", logFilePath, fileName, DateTime.Now.ToString("HHmm-MMdd-yyyy"));
            testCaseRoller.Layout             = patternLayoutTC;
            testCaseRoller.DatePattern        = "HH-MMdd-yyyy";
            testCaseRoller.MaxSizeRollBackups = -1;
            testCaseRoller.MaximumFileSize    = "1MB";
            testCaseRoller.RollingStyle       = RollingFileAppender.RollingMode.Composite;

            var filterTC = new log4net.Filter.LevelRangeFilter
            {
                LevelMin = Level.Debug,
                LevelMax = Level.Warn
            };

            testCaseRoller.AddFilter(filterTC);
            testCaseRoller.ActivateOptions();
            hierarchy.Root.AddAppender(testCaseRoller);


            PatternLayout ErrorPatternLayout = new PatternLayout();

            ErrorPatternLayout.ConversionPattern = "%date [%level] %logger - message: %message%newline%newline";
            ErrorPatternLayout.ActivateOptions();

            FileAppender ErrorFiles = new FileAppender();

            ErrorFiles.File         = string.Format("{0}ErrorLogFile.log", logFilePath);
            ErrorFiles.AppendToFile = true;
            ErrorFiles.LockingModel = new FileAppender.MinimalLock();
            ErrorFiles.Layout       = ErrorPatternLayout;

            var filter = new log4net.Filter.LevelRangeFilter
            {
                LevelMin = Level.Error,
                LevelMax = Level.Fatal
            };

            ErrorFiles.AddFilter(filter);
            ErrorFiles.ActivateOptions();
            hierarchy.Root.AddAppender(ErrorFiles);

            MemoryAppender memory = new MemoryAppender();

            memory.ActivateOptions();
            hierarchy.Root.AddAppender(memory);

            hierarchy.Root.Level = Level.All;
            hierarchy.Configured = true;
        }
Ejemplo n.º 23
0
        private void SetUpConsole(IConfigSource config, IRegistryCore registry)
        {
            List <ICommandConsole> Plugins = AuroraModuleLoader.PickupModules <ICommandConsole>();

            foreach (ICommandConsole plugin in Plugins)
            {
                plugin.Initialize(config, registry.RequestModuleInterface <ISimulationBase>());
            }

            List <INotificationService> NotificationPlugins = AuroraModuleLoader.PickupModules <INotificationService>();

            foreach (INotificationService plugin in NotificationPlugins)
            {
                plugin.Init(config, registry);
            }

            ILoggerRepository repository = LogManager.GetRepository();

            IAppender[] appenders = repository.GetAppenders();
            foreach (IAppender appender in appenders)
            {
                if (appender.Name == "Console")
                {
                    m_consoleAppender = (OpenSimAppender)appender;
                    break;
                }
            }

            if (null != m_consoleAppender)
            {
                m_consoleAppender.Console = MainConsole.Instance;
                // If there is no threshold set then the threshold is effectively everything.
                if (null == m_consoleAppender.Threshold)
                {
                    m_consoleAppender.Threshold = Level.All;
                }
                repository.Threshold = m_consoleAppender.Threshold;
                foreach (ILogger log in repository.GetCurrentLoggers())
                {
                    log.Level = m_consoleAppender.Threshold;
                }
            }
            IAppender logFileAppender = null;

            foreach (IAppender appender in appenders)
            {
                if (appender.Name == "LogFileAppender")
                {
                    logFileAppender = appender;
                }
            }

            if (logFileAppender != null)
            {
                if (logFileAppender is FileAppender)
                {
                    FileAppender appender      = (FileAppender)logFileAppender;
                    IConfig      startupConfig = config.Configs["Startup"];
                    string       fileName      = startupConfig.GetString("LogFile", String.Empty);
                    if (fileName != String.Empty)
                    {
                        appender.File = fileName;
                        appender.ActivateOptions();
                    }
                }
            }
            if (MainConsole.Instance == null)
            {
                m_log.Info("[Console]: No Console located");
                return;
            }

            MainConsole.Instance.MaxLogLevel = m_consoleAppender.Threshold;
            if (m_consoleAppender != null)
            {
                MainConsole.Instance.Fatal(String.Format("[Console]: Console log level is {0}", m_consoleAppender.Threshold));
            }

            MainConsole.Instance.Commands.AddCommand("set log level", "set log level [level]", "Set the console logging level", HandleLogLevel);

            MainConsole.Instance.Commands.AddCommand("get log level", "get log level", "Returns the current console logging level", HandleGetLogLevel);
        }
    public static ILogger Create(string logFile, bool outputConsole)
    {
        var logger = new FileAppender(logFile, outputConsole);

        return(new Logger(logger));
    }
Ejemplo n.º 25
0
 void Start()
 {
     this.logger = FileAppender.Create("logfile.txt", true);
 }
Ejemplo n.º 26
0
        // Handle all the automagical stuff
        public ServicesServerBase(string prompt, string[] args)
        {
            // Save raw arguments
            m_Arguments = args;

            // Read command line
            ArgvConfigSource argvConfig = new ArgvConfigSource(args);

            argvConfig.AddSwitch("Startup", "console", "c");
            argvConfig.AddSwitch("Startup", "logfile", "l");
            argvConfig.AddSwitch("Startup", "inifile", "i");

            // Automagically create the ini file name
            string       fullName     = Assembly.GetEntryAssembly().FullName;
            AssemblyName assemblyName = new AssemblyName(fullName);

            string iniFile = assemblyName.Name + ".ini";

            // Check if a file name was given on the command line
            IConfig startupConfig = argvConfig.Configs["Startup"];

            if (startupConfig != null)
            {
                iniFile = startupConfig.GetString("inifile", iniFile);
            }

            // Find out of the file name is a URI and remote load it
            // if it's possible. Load it as a local file otherwise.
            Uri configUri;

            try
            {
                if (Uri.TryCreate(iniFile, UriKind.Absolute, out configUri) && configUri.Scheme == Uri.UriSchemeHttp)
                {
                    XmlReader r = XmlReader.Create(iniFile);
                    m_Config = new XmlConfigSource(r);
                }
                else
                {
                    m_Config = new IniConfigSource(iniFile);
                }
            }
            catch (Exception)
            {
                System.Console.WriteLine("Error reading from config source {0}", iniFile);
                Thread.CurrentThread.Abort();
            }

            // Merge the configuration from the command line into the
            // loaded file
            m_Config.Merge(argvConfig);

            // Refresh the startupConfig post merge
            startupConfig = argvConfig.Configs["Startup"];

            // Allow derived classes to load config before the console is
            // opened.
            ReadConfig();

            // Create main console
            string consoleType = "local";

            if (startupConfig != null)
            {
                consoleType = startupConfig.GetString("console", consoleType);
            }

            if (consoleType == "basic")
            {
                MainConsole.Instance = new CommandConsole(prompt);
            }
            else
            {
                MainConsole.Instance = new LocalConsole(prompt);
            }

            // Configure the appenders for log4net
            OpenSimAppender consoleAppender = null;
            FileAppender    fileAppender    = null;

            XmlConfigurator.Configure();

            ILoggerRepository repository = LogManager.GetRepository();

            IAppender[] appenders = repository.GetAppenders();

            foreach (IAppender appender in appenders)
            {
                if (appender.Name == "Console")
                {
                    consoleAppender = (OpenSimAppender)appender;
                }

                if (appender.Name == "LogFileAppender")
                {
                    fileAppender = (FileAppender)appender;
                }
            }

            if (consoleAppender == null)
            {
                System.Console.WriteLine("No console appender found. Server can't start");
                Thread.CurrentThread.Abort();
            }
            else
            {
                consoleAppender.Console = MainConsole.Instance;

                if (null == consoleAppender.Threshold)
                {
                    consoleAppender.Threshold = Level.All;
                }
            }

            // Set log file
            if (fileAppender != null)
            {
                if (startupConfig != null)
                {
                    fileAppender.File = startupConfig.GetString("logfile", assemblyName.Name + ".log");
                }
            }

            // Register the quit command
            MainConsole.Instance.Commands.AddCommand("base", false, "quit",
                                                     "quit",
                                                     "Quit the application", HandleQuit);

            // Allow derived classes to perform initialization that
            // needs to be done after the console has opened
            Initialise();
        }
Ejemplo n.º 27
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            /***
             * Implements error logging.
             * Configure all appenders.
             * Get logging level out of App.config.
             */
            Logger logger = Logger.Instance;

            // Create file appender for logging
            FileAppender filelogger = new FileAppender();
            filelogger.Configure();

            // Add all logger appenders to static list
            Logger.Appenders.Add(filelogger);

            // Get logging level out of config file
            AppSettingsReader config = new AppSettingsReader(); // Settings.Default.
            Logger.Loggerlevel = (int)config.GetValue("LoggerLevel", typeof(int));

            // Program startup logging
            logger.Log(Logger.Level.Info, "-----------------------------------------------------------");
            logger.Log(Logger.Level.Info, "Program is started.");
            logger.Log(Logger.Level.Info, "Logging level: " + Logger.Loggerlevel);

            /***
             * Checks data base existance and creates if needed.
             */
            ConfigFileManager cfm = new ConfigFileManager();
            bool exists = false;

            try
            {
                // Check if mock database shall be used. Result is stored in var ConfigFileManager.mockDB
                cfm.UsingMockDatabase();

                // Save info in logfile
                if (ConfigFileManager.MockDB == true)
                {
                    logger.Log(Logger.Level.Info, "Using mock database.");
                }
                else
                {
                    logger.Log(Logger.Level.Info, "Using SQLite database.");
                }

                exists = cfm.CheckDataBaseExistance();
            }
            // probably syntax error in config file - see logfile
            catch (System.Configuration.ConfigurationErrorsException)
            {
                Application.Exit();
            }

            // Open window, which one depends on whether the database has been found or not
            if (!exists)
            {
                Application.Run(new DBNotFoundForm());
            }
            else // database found. Start with home screen.
            {
                Application.Run(new HomeForm());
            }
        }
Ejemplo n.º 28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FileAppenderFApi"/> class.
 /// </summary>
 /// <param name="fileFI">FileAppender</param>
 public FileAppenderFApi(FileAppender fileFI)
 {
     this.file = fileFI;
 }
Ejemplo n.º 29
0
        static async Task Main(string[] args)
        {
            IWorker worker = null;

            try
            {
                new ArgsManager <ArgsHandler>().Start(args);
                var appender = new FileAppender
                {
                    Layout       = new SimpleLayout(),
                    File         = Assembly.GetExecutingAssembly().Location + ".log",
                    Encoding     = Encoding.UTF8,
                    AppendToFile = true,
                    LockingModel = new FileAppender.MinimalLock()
                };
                appender.ActivateOptions();
                var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
                BasicConfigurator.Configure(logRepo, appender);
                var primaryDirectory = Args.Value(ArgsHandler.PrimaryDirectory);
                var name             = Args.Value(ArgsHandler.Name);
                var ip   = Args.Value(ArgsHandler.IpAddress);
                var port = Args.Value(ArgsHandler.Port).To <int>();
                if (string.IsNullOrWhiteSpace(name))
                {
                    name = $"{ip}:{port}";
                }

                var repoType = Args.Value(ArgsHandler.Repo);
                IDirectoryPreparerAsync directoryPreparer = null;
                IRepo repo = null;
                if (repoType == "Local")
                {
                    directoryPreparer = new LocalDirectoryPreparerAsync();
                    repo = new LocalRepo();
                }
                if (repoType == "S3")
                {
                    var region = RegionEndpoint.GetBySystemName(ConfigurationManager.AppSettings["AWSRegion"]);
                    var client = new AmazonS3Client(Args.Value("AccessKey"), Args.Value("SecretKey"), region);
                    var bucket = Args.Value(ArgsHandler.Bucket);
                    repo = new S3Repo(client, bucket);
                    directoryPreparer = new S3DirectoryPreparerAsync(client, bucket);
                }

                var isPrepared = await directoryPreparer.PrepareAync(primaryDirectory, Folders.SubDirs);

                if (!isPrepared)
                {
                    throw new Exception(Messages.FolderStructureNotPrepared);
                }


                worker = new Worker(name, ip, port, new ReplyServer(), primaryDirectory,
                                    directoryPreparer,
                                    new ElectionRequester(new RequestClient()),
                                    repo.Reader,
                                    repo.Writer,
                                    repo.UnitOfWorkReader,
                                    repo.UnitOfWorkWriter);
                await worker.StartAsync();

                var task = (worker as Worker)?.ListenerTask;
                if (task != null)
                {
                    await Task.WhenAll(task);
                }
            }
            catch (Exception e)
            {
                (worker as Worker)._Logger.Debug(e.ToString());
            }
        }
Ejemplo n.º 30
0
        /// <summary>
        ///     Loads native dependencies.
        /// </summary>
        private static void Initialize()
        {
            if (_isInitialized)
            {
                return;
            }

            #region Prepare logger

            var hierarchy = (Hierarchy)LogManager.GetRepository();

            var logFile = new FileAppender
            {
                AppendToFile = true,
                File         = string.Format("XInput1_3_{0}.log.xml", Environment.UserName),
                Layout       = new XmlLayoutSchemaLog4j(true)
            };
            logFile.ActivateOptions();
            hierarchy.Root.AddAppender(logFile);

            hierarchy.Root.Level = Level.Debug;
            hierarchy.Configured = true;

            #endregion

            Log.InfoFormat("Library loaded by process {0} [{1}]",
                           Process.GetCurrentProcess().ProcessName,
                           Process.GetCurrentProcess().MainWindowTitle);

            Log.Info("Initializing library");

            var iniOpts = new IniOptions
            {
                CommentStarter = IniCommentStarter.Semicolon
            };

            var ini      = new IniFile(iniOpts);
            var fullPath = Path.Combine(WorkingDirectory, CfgFile);
            Log.DebugFormat("INI-File path: {0}", fullPath);

            if (!File.Exists(fullPath))
            {
                Log.FatalFormat("Configuration file {0} not found", fullPath);
                return;
            }

            try
            {
                // parse data from INI
                ini.Load(fullPath);

                var basePath = ini.Sections["ScpControl"].Keys["BinPath"].Value;
                Log.DebugFormat("ScpToolkit bin path: {0}", basePath);
                var binName = ini.Sections["ScpControl"].Keys["BinName"].Value;
                Log.DebugFormat("ScpControl bin path: {0}", binName);

                // load all assembly dependencies
                AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
                {
                    var asmName = new AssemblyName(args.Name).Name;
                    Log.DebugFormat("Loading assembly: {0}", asmName);

                    return(Assembly.LoadFrom(Path.Combine(basePath, string.Format("{0}.dll", asmName))));
                };

                var scpControl   = Assembly.LoadFrom(Path.Combine(basePath, binName));
                var scpProxyType = scpControl.GetType("ScpControl.ScpProxy");

                _scpProxy = Activator.CreateInstance(scpProxyType);

                _scpProxy.Start();
            }
            catch (Exception ex)
            {
                Log.FatalFormat("Error during library initialization: {0}", ex);
                return;
            }

            // if no custom path specified by user, use DLL in system32 dir
            var xinput13Path = ini.Sections["xinput1_3"].Keys.Contains("OriginalFilePath")
                ? ini.Sections["xinput1_3"].Keys["OriginalFilePath"].Value
                : Path.Combine(Environment.SystemDirectory, "xinput1_3.dll");
            Log.DebugFormat("Original XInput 1.3 DLL path: {0}", xinput13Path);

            _dll = Kernel32Natives.LoadLibrary(xinput13Path);

            if (_dll != IntPtr.Zero)
            {
                _isInitialized = true;
            }

            Log.Info("Library initialized");
        }
Ejemplo n.º 31
0
        public static void Run(string[] argsArray, IServiceConfig?config = null)
        {
            bool inConsoleMode = argsArray.Length > 0;

            config ??= LoadConfigAndInitLoggers(inConsoleMode);

            if (!inConsoleMode)
            {
                Log.Debug("Starting WinSW in service mode");
                using var service = new WrapperService(config);
                try
                {
                    ServiceBase.Run(service);
                }
                catch
                {
                    // handled in OnStart
                }

                return;
            }

            Log.Debug("Starting WinSW in console mode");

            if (argsArray.Length == 0)
            {
                PrintHelp();
                return;
            }

            var args = new List <string>(Array.AsReadOnly(argsArray));

            if (args[0] == "/redirect")
            {
                var f = new FileStream(args[1], FileMode.Create);
                var w = new StreamWriter(f)
                {
                    AutoFlush = true
                };
                Console.SetOut(w);
                Console.SetError(w);

                var handle = f.SafeFileHandle;
                _ = Kernel32.SetStdHandle(-11, handle); // set stdout
                _ = Kernel32.SetStdHandle(-12, handle); // set stder

                args = args.GetRange(2, args.Count - 2);
            }

            bool elevated;

            if (args[0] == "/elevated")
            {
                elevated = true;

                _ = ConsoleApis.FreeConsole();
                _ = ConsoleApis.AttachConsole(ConsoleApis.ATTACH_PARENT_PROCESS);

#if VNEXT
                string stdinName = args[1];
                if (stdinName != NoPipe)
                {
                    var stdin = new NamedPipeClientStream(".", stdinName, PipeDirection.In, PipeOptions.Asynchronous);
                    stdin.Connect();
                    Console.SetIn(new StreamReader(stdin));
                }

                string stdoutName = args[2];
                if (stdoutName != NoPipe)
                {
                    var stdout = new NamedPipeClientStream(".", stdoutName, PipeDirection.Out, PipeOptions.Asynchronous);
                    stdout.Connect();
                    Console.SetOut(new StreamWriter(stdout)
                    {
                        AutoFlush = true
                    });
                }

                string stderrName = args[3];
                if (stderrName != NoPipe)
                {
                    var stderr = new NamedPipeClientStream(".", stderrName, PipeDirection.Out, PipeOptions.Asynchronous);
                    stderr.Connect();
                    Console.SetError(new StreamWriter(stderr)
                    {
                        AutoFlush = true
                    });
                }

                args = args.GetRange(4, args.Count - 4);
#else
                args = args.GetRange(1, args.Count - 1);
#endif
            }
            else if (Environment.OSVersion.Version.Major == 5)
            {
                // Windows XP
                elevated = true;
            }
            else
            {
                elevated = IsProcessElevated();
            }

            switch (args[0].ToLower())
            {
            case "install":
                Install();
                return;

            case "uninstall":
                Uninstall();
                return;

            case "start":
                Start();
                return;

            case "stop":
                Stop(true);
                return;

            case "stopwait":
                Stop(false);
                return;

            case "restart":
                Restart();
                return;

            case "restart!":
                RestartSelf();
                return;

            case "status":
                Status();
                return;

            case "test":
                Test();
                return;

            case "testwait":
                TestWait();
                return;

            case "help":
            case "--help":
            case "-h":
            case "-?":
            case "/?":
                PrintHelp();
                return;

            case "version":
                PrintVersion();
                return;

            default:
                Console.WriteLine("Unknown command: " + args[0]);
                PrintAvailableCommands();
                throw new Exception("Unknown command: " + args[0]);
            }

            void Install()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                Log.Info($"Installing service '{Format(config)}'...");

                using var scm = ServiceManager.Open(ServiceManagerAccess.CreateService);

                if (scm.ServiceExists(config.Name))
                {
                    Log.Error($"A service with ID '{config.Name}' already exists.");
                    Throw.Command.Win32Exception(Errors.ERROR_SERVICE_EXISTS, "Failed to install the service.");
                }

                string?username = null;
                string?password = null;
                bool   allowServiceLogonRight = false;

                if (args.Count > 1 && args[1] == "/p")
                {
                    Credentials.PromptForCredentialsConsole(ref username, ref password);
                    Console.Write("Set Account rights to allow log on as a service (y/n)?: ");
                    var keypressed = Console.ReadKey();
                    Console.WriteLine();
                    if (keypressed.Key == ConsoleKey.Y)
                    {
                        allowServiceLogonRight = true;
                    }
                }
                else
                {
                    if (config.ServiceAccount.HasServiceAccount())
                    {
                        username = config.ServiceAccount.FullUser;
                        password = config.ServiceAccount.Password;
                        allowServiceLogonRight = config.ServiceAccount.AllowServiceLogonRight;
                    }
                }

                if (allowServiceLogonRight)
                {
                    Security.AddServiceLogonRight(config.ServiceAccount.Domain !, config.ServiceAccount.User !);
                }

                using var sc = scm.CreateService(
                          config.Name,
                          config.DisplayName,
                          config.Interactive,
                          config.StartMode,
                          $"\"{config.ExecutablePath}\"",
                          config.ServiceDependencies,
                          username,
                          password);

                string description = config.Description;

                if (description.Length != 0)
                {
                    sc.SetDescription(description);
                }

                var actions = config.FailureActions;

                if (actions.Length > 0)
                {
                    sc.SetFailureActions(config.ResetFailureAfter, actions);
                }

                bool isDelayedAutoStart = config.StartMode == ServiceStartMode.Automatic && config.DelayedAutoStart;

                if (isDelayedAutoStart)
                {
                    sc.SetDelayedAutoStart(true);
                }

                string?securityDescriptor = config.SecurityDescriptor;

                if (securityDescriptor != null)
                {
                    // throws ArgumentException
                    sc.SetSecurityDescriptor(new RawSecurityDescriptor(securityDescriptor));
                }

                string eventLogSource = config.Name;

                if (!EventLog.SourceExists(eventLogSource))
                {
                    EventLog.CreateEventSource(eventLogSource, "Application");
                }

                Log.Info($"Service '{Format(config)}' was installed successfully.");
            }

            void Uninstall()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                Log.Info($"Uninstalling service '{Format(config)}'...");

                using var scm = ServiceManager.Open(ServiceManagerAccess.Connect);
                try
                {
                    using var sc = scm.OpenService(config.Name);

                    if (sc.Status != ServiceControllerStatus.Stopped)
                    {
                        // We could fail the opeartion here, but it would be an incompatible change.
                        // So it is just a warning
                        Log.Warn($"Service '{Format(config)}' is started. It may be impossible to uninstall it.");
                    }

                    sc.Delete();

                    Log.Info($"Service '{Format(config)}' was uninstalled successfully.");
                }
                catch (CommandException e) when(e.InnerException is Win32Exception inner)
                {
                    switch (inner.NativeErrorCode)
                    {
                    case Errors.ERROR_SERVICE_DOES_NOT_EXIST:
                        Log.Warn($"Service '{Format(config)}' does not exist.");
                        break;     // there's no such service, so consider it already uninstalled

                    case Errors.ERROR_SERVICE_MARKED_FOR_DELETE:
                        Log.Error(e.Message);

                        // TODO: change the default behavior to Error?
                        break;     // it's already uninstalled, so consider it a success

                    default:
                        Throw.Command.Exception("Failed to uninstall the service.", inner);
                        break;
                    }
                }
            }

            void Start()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                using var svc = new ServiceController(config.Name);

                try
                {
                    Log.Info($"Starting service '{Format(svc)}'...");
                    svc.Start();

                    Log.Info($"Service '{Format(svc)}' started successfully.");
                }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_DOES_NOT_EXIST)
                    {
                        Throw.Command.Exception(inner);
                    }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_ALREADY_RUNNING)
                    {
                        Log.Info($"Service '{Format(svc)}' has already started.");
                    }
            }

            void Stop(bool noWait)
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                using var svc = new ServiceController(config.Name);

                try
                {
                    Log.Info($"Stopping service '{Format(svc)}'...");
                    svc.Stop();

                    if (!noWait)
                    {
                        try
                        {
                            WaitForStatus(svc, ServiceControllerStatus.Stopped, ServiceControllerStatus.StopPending);
                        }
                        catch (TimeoutException)
                        {
                            Throw.Command.Exception("Failed to stop the service.");
                        }
                    }

                    Log.Info($"Service '{Format(svc)}' stopped successfully.");
                }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_DOES_NOT_EXIST)
                    {
                        Throw.Command.Exception(inner);
                    }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_NOT_ACTIVE)
                    {
                        Log.Info($"Service '{Format(svc)}' has already stopped.");
                    }
            }

            void Restart()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }


                using var svc = new ServiceController(config.Name);

                List <ServiceController>?startedDependentServices = null;

                try
                {
                    if (HasAnyStartedDependentService(svc))
                    {
                        startedDependentServices = new();
                        foreach (var service in svc.DependentServices)
                        {
                            if (service.Status != ServiceControllerStatus.Stopped)
                            {
                                startedDependentServices.Add(service);
                            }
                        }
                    }

                    Log.Info($"Stopping service '{Format(svc)}'...");
                    svc.Stop();

                    try
                    {
                        WaitForStatus(svc, ServiceControllerStatus.Stopped, ServiceControllerStatus.StopPending);
                    }
                    catch (TimeoutException)
                    {
                        Throw.Command.Exception("Failed to stop the service.");
                    }
                }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_DOES_NOT_EXIST)
                    {
                        Throw.Command.Exception(inner);
                    }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_NOT_ACTIVE)
                    {
                    }

                Log.Info($"Starting service '{Format(svc)}'...");
                svc.Start();

                try
                {
                    WaitForStatus(svc, ServiceControllerStatus.Running, ServiceControllerStatus.StartPending);
                }
                catch (TimeoutException)
                {
                    Throw.Command.Exception("Failed to start the service.");
                }

                if (startedDependentServices != null)
                {
                    foreach (var service in startedDependentServices)
                    {
                        if (service.Status == ServiceControllerStatus.Stopped)
                        {
                            Log.Info($"Starting service '{Format(service)}'...");
                            service.Start();
                        }
                    }
                }

                Log.Info($"Service '{Format(svc)}' restarted successfully.");
            }

            void RestartSelf()
            {
                if (!elevated)
                {
                    Throw.Command.Win32Exception(Errors.ERROR_ACCESS_DENIED);
                }

                Log.Info("Restarting the service with id '" + config.Name + "'");

                // run restart from another process group. see README.md for why this is useful.
                if (!ProcessApis.CreateProcess(
                        null,
                        config.ExecutablePath + " restart",
                        IntPtr.Zero,
                        IntPtr.Zero,
                        false,
                        ProcessApis.CREATE_NEW_PROCESS_GROUP,
                        IntPtr.Zero,
                        null,
                        default,
                        out var processInfo))
                {
                    Throw.Command.Win32Exception("Failed to invoke restart.");
                }

                _ = HandleApis.CloseHandle(processInfo.ProcessHandle);
                _ = HandleApis.CloseHandle(processInfo.ThreadHandle);
            }

            void Status()
            {
                using var svc = new ServiceController(config.Name);
                try
                {
                    Console.WriteLine(svc.Status != ServiceControllerStatus.Stopped ? "Started" : "Stopped");
                }
                catch (InvalidOperationException e)
                    when(e.InnerException is Win32Exception inner && inner.NativeErrorCode == Errors.ERROR_SERVICE_DOES_NOT_EXIST)
                    {
                        Console.WriteLine("NonExistent");
                    }
            }

            void Test()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                var wsvc = new WrapperService(config);

                wsvc.RaiseOnStart(args.ToArray());
                Thread.Sleep(1000);
                wsvc.RaiseOnStop();
            }

            void TestWait()
            {
                if (!elevated)
                {
                    Elevate();
                    return;
                }

                var wsvc = new WrapperService(config);

                wsvc.RaiseOnStart(args.ToArray());
                Console.WriteLine("Press any key to stop the service...");
                _ = Console.Read();
                wsvc.RaiseOnStop();
            }

            // [DoesNotReturn]
            void Elevate()
            {
#if VNEXT
                string?stdinName  = Console.IsInputRedirected ? Guid.NewGuid().ToString() : null;
                string?stdoutName = Console.IsOutputRedirected ? Guid.NewGuid().ToString() : null;
                string?stderrName = Console.IsErrorRedirected ? Guid.NewGuid().ToString() : null;
#endif

                string exe         = Environment.GetCommandLineArgs()[0];
                string commandLine = Environment.CommandLine;
                string arguments   = "/elevated" +
#if VNEXT
                                     " " + (stdinName ?? NoPipe) +
                                     " " + (stdoutName ?? NoPipe) +
                                     " " + (stderrName ?? NoPipe) +
#endif
                                     commandLine.Remove(commandLine.IndexOf(exe), exe.Length).TrimStart('"');

                var startInfo = new ProcessStartInfo
                {
                    UseShellExecute = true,
                    Verb            = "runas",
                    FileName        = ExecutablePath,
                    Arguments       = arguments,
                    WindowStyle     = ProcessWindowStyle.Hidden,
                };

                try
                {
                    using var elevated = Process.Start(startInfo) !;

#if VNEXT
                    if (stdinName != null)
                    {
                        var stdin = new NamedPipeServerStream(stdinName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
                        stdin.WaitForConnectionAsync().ContinueWith(_ => Console.OpenStandardInput().CopyToAsync(stdin));
                    }

                    if (stdoutName != null)
                    {
                        var stdout = new NamedPipeServerStream(stdoutName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
                        stdout.WaitForConnectionAsync().ContinueWith(_ => stdout.CopyToAsync(Console.OpenStandardOutput()));
                    }

                    if (stderrName != null)
                    {
                        var stderr = new NamedPipeServerStream(stderrName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
                        stderr.WaitForConnectionAsync().ContinueWith(_ => stderr.CopyToAsync(Console.OpenStandardError()));
                    }
#endif

                    elevated.WaitForExit();
                    Environment.Exit(elevated.ExitCode);
                }
                catch (Win32Exception e) when(e.NativeErrorCode == Errors.ERROR_CANCELLED)
                {
                    Log.Fatal(e.Message);
                    Environment.Exit(e.ErrorCode);
                }
            }
        }

        private static IServiceConfig LoadConfigAndInitLoggers(bool inConsoleMode)
        {
            // TODO: Make logging levels configurable
            var fileLogLevel = Level.Debug;

            // TODO: Debug should not be printed to console by default. Otherwise commands like 'status' will be pollutted
            // This is a workaround till there is a better command line parsing, which will allow determining
            var consoleLogLevel = Level.Info;
            var eventLogLevel   = Level.Warn;

            var layout = new PatternLayout {
                ConversionPattern = "%d %-5p - %m%n"
            };

            layout.ActivateOptions();

            var repository = LogManager.GetRepository(Assembly.GetExecutingAssembly());

            if (inConsoleMode)
            {
                var consoleAppender = new ConsoleAppender
                {
                    Name      = "Wrapper console log",
                    Threshold = consoleLogLevel,
                    Layout    = layout,
                };
                consoleAppender.ActivateOptions();

                BasicConfigurator.Configure(repository, consoleAppender);
            }
            else
            {
                var eventLogAppender = new ServiceEventLogAppender(WrapperService.eventLogProvider)
                {
                    Name      = "Wrapper event log",
                    Threshold = eventLogLevel,
                };
                eventLogAppender.ActivateOptions();

                BasicConfigurator.Configure(repository, eventLogAppender);
            }

            string executablePath = ExecutablePath;
            string directory      = Path.GetDirectoryName(executablePath) !;
            string baseName       = Path.GetFileNameWithoutExtension(executablePath);

            IServiceConfig config =
                File.Exists(Path.Combine(directory, baseName + ".xml")) ? new XmlServiceConfig(baseName, directory) :
                File.Exists(Path.Combine(directory, baseName + ".yml")) ? new YamlServiceConfig(baseName, directory) :
                throw new FileNotFoundException($"Unable to locate {baseName}.[xml|yml] file within executable directory");

            // .wrapper.log
            string wrapperLogPath = Path.Combine(config.LogDirectory, config.BaseName + ".wrapper.log");
            var    fileAppender   = new FileAppender
            {
                AppendToFile   = true,
                File           = wrapperLogPath,
                ImmediateFlush = true,
                Name           = "Wrapper file log",
                Threshold      = fileLogLevel,
                LockingModel   = new FileAppender.MinimalLock(),
                Layout         = layout,
            };

            fileAppender.ActivateOptions();

            BasicConfigurator.Configure(repository, fileAppender);

            return(config);
        }

        internal static unsafe bool IsProcessElevated()
Ejemplo n.º 32
0
        static void Main(string[] args)
        {
            var soundtracksListPath = @".\soundtracks.list";

            if (args.Length > 0)
            {
                soundtracksListPath = args[0];
            }

            // Set up a logger
            var logFile = new FileAppender();

            logFile.Threshold      = Level.Error;
            logFile.Layout         = new PatternLayout(@"%-6timestamp [%thread] %-5level %30.30logger %ndc: %message%newline");
            logFile.File           = Path.Combine(Path.GetTempPath(), @"parser.log");
            logFile.AppendToFile   = false;
            logFile.ImmediateFlush = true;
            logFile.ActivateOptions();
            BasicConfigurator.Configure(logFile);

            Console.WriteLine("Opening file for read...");
            Stream soundtracksStream = File.OpenRead(soundtracksListPath);
            var    reader            = new StreamReader(soundtracksStream);

            Console.WriteLine("...done");

            Console.WriteLine("Counting productions in the file...");
            string         line           = reader.ReadLine();
            IList <string> rawProductions = new List <string>();
            IList <string> rawSongs       = new List <string>();

            while (line != null)
            {
                if (line.StartsWith("#"))
                {
                    rawProductions.Add(line);
                }

                if (line.StartsWith("-"))
                {
                    line = line.Replace(" (uncredited)", string.Empty).TrimStart('-').Trim();
                    rawSongs.Add(line);
                }

                line = reader.ReadLine();
            }
            Console.WriteLine("...done");
            Console.WriteLine("Counted {0} productions and {1} songs.", rawProductions.Count, rawSongs.Count);

            soundtracksStream.Seek(0, SeekOrigin.Begin);

            Console.WriteLine("Parsing productions in the file...");
            var parser = new SoundtrackFileParser(LogManager.GetLogger(typeof(SoundtrackFileParser)));

            IEnumerable <SoundtrackRecord> records = parser.Parse(soundtracksStream);

            Console.WriteLine("...done");

            var parsedSongsCount = (from r in records
                                    select r.Songs.Count).Sum();

            Console.WriteLine("Parsed {0} productions of {1} total and {2} songs of {3} total.",
                              records.Count(), rawProductions.Count, parsedSongsCount, rawSongs.Count);

            Console.ReadLine();
        }
Ejemplo n.º 33
0
 static string \u206F‫‍‪‫​‭‌‫‌‌‍‌‎‭‪‎‫‌‪‬‮([In] FileAppender obj0)
 {
     return(obj0.get_File());
 }
Ejemplo n.º 34
0
 public Logger(IAppender appender, FileAppender fileAppender) :
     this(appender)
 {
     this.fileAppender = fileAppender;
 }
Ejemplo n.º 35
0
        static void Main(string[] args)
        {
            List <IAppender> testAppender = new List <IAppender>();
            ILayout          layout       = null;
            ILogFile         logFile      = new LogFile();
            var repeat = int.Parse(Console.ReadLine());

            for (int i = 0; i < repeat; i++)
            {
                IAppender appender = null;

                var inputCommand = Console.ReadLine().Split(' ');
                if (inputCommand[1] == "SimpleLayout")
                {
                    layout = new SimpleLayout();
                }
                if (inputCommand[1] == "XmlLayout")
                {
                    layout = new XmlLayout();
                }

                if (inputCommand[0] == "ConsoleAppender")
                {
                    appender = new ConsoleAppender(layout);
                }
                else if (inputCommand[0] == "FileAppender")
                {
                    appender = new FileAppender(layout, logFile);
                }
                if (inputCommand.Length == 3)
                {
                    foreach (ReportLevel current in Enum.GetValues(typeof(ReportLevel)))
                    {
                        if (current.ToString().ToLower() == inputCommand[2].ToLower())
                        {
                            appender.ReportLevel = current;
                        }
                    }
                }
                testAppender.Add(appender);
            }
            ILogger logger = new Logger(testAppender.ToArray());

            while (true)
            {
                var inputCommand = Console.ReadLine().Split('|');

                if (inputCommand[0] == "END")
                {
                    break;
                }
                switch (inputCommand[0])
                {
                case "INFO":
                    logger.Info(inputCommand[1], inputCommand[2]);
                    break;

                case "WARNING":
                    logger.Warning(inputCommand[1], inputCommand[2]);
                    break;

                case "ERROR":
                    logger.Error(inputCommand[1], inputCommand[2]);
                    break;

                case "CRITICAL":
                    logger.Critical(inputCommand[1], inputCommand[2]);
                    break;

                case "FATAL":
                    logger.Fatal(inputCommand[1], inputCommand[2]);
                    break;

                default:
                    break;
                }
            }
        }
Ejemplo n.º 36
0
        internal static void ReconfigureLogger()
        {
            string logFile = Path.Combine(AppSettings.AppSettingsPath, "ErrorLog.xml");

            if (Log.Logger.Repository.Configured)
            {
                Log.Logger.Repository.Shutdown();
                Log.Logger.Repository.ResetConfiguration();
            }

            if (_clearLog)
            {
                try
                {
                    File.Delete(logFile);
                }
// ReSharper disable EmptyGeneralCatchClause
                catch (Exception)
// ReSharper restore EmptyGeneralCatchClause
                {
                }
                _clearLog = false;
            }

            PatternLayout    layout = new PatternLayout();
            LevelRangeFilter filter = new LevelRangeFilter();

            if (AppSettings.UseDebug)
            {
                layout.ConversionPattern = "%date{HH:mm:ss} [%thread] %-5level %logger.%method(%line) - %message%newline";

                filter.LevelMin = Level.All;
            }
            else
            {
                layout.ConversionPattern = "%date{HH:mm:ss} %-5level %logger - %message%newline";

                filter.LevelMin = Level.Warn;
            }

            filter.AcceptOnMatch = true;

            layout.ActivateOptions();

            XmlLayoutSchemaLog4j xmlLayout    = new XmlLayoutSchemaLog4j(true);
            RollingFileAppender  fileAppender = new RollingFileAppender
            {
                PreserveLogFileNameExtension = true,
                StaticLogFileName            = false,
                DatePattern    = "yyyyMMdd",
                RollingStyle   = RollingFileAppender.RollingMode.Date,
                ImmediateFlush = true,
                File           = logFile,
                Encoding       = new UTF8Encoding(true),
                Layout         = xmlLayout
            };

            fileAppender.AddFilter(filter);
            fileAppender.ActivateOptions();

            FileAppender file = new FileAppender
            {
                Layout         = layout,
                AppendToFile   = true,
                Encoding       = new UTF8Encoding(),
                File           = logFile,
                ImmediateFlush = true
            };

            file.AddFilter(filter);

            file.ActivateOptions();

            BasicConfigurator.Configure(fileAppender);

            if (AppSettings.UseDebug)
            {
                Log.Info("Debug information enabled");
            }
        }
Ejemplo n.º 37
0
        private static void InitLoggers(ServiceDescriptor d, bool enableCLILogging)
        {
            // TODO: Make logging levels configurable
            Level logLevel = Level.Debug;
            // TODO: Debug should not be printed to console by default. Otherwise commands like 'status' will be pollutted
            // This is a workaround till there is a better command line parsing, which will allow determining
            Level consoleLogLevel = Level.Info;
            Level eventLogLevel   = Level.Warn;

            // Legacy format from winsw-1.x: (DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " - " + message);
            PatternLayout pl = new PatternLayout {
                ConversionPattern = "%d %-5p - %m%n"
            };

            pl.ActivateOptions();

            List <IAppender> appenders = new List <IAppender>();

            // wrapper.log
            string wrapperLogPath = Path.Combine(d.LogDirectory, d.BaseName + ".wrapper.log");
            var    wrapperLog     = new FileAppender
            {
                AppendToFile   = true,
                File           = wrapperLogPath,
                ImmediateFlush = true,
                Name           = "Wrapper file log",
                Threshold      = logLevel,
                LockingModel   = new FileAppender.MinimalLock(),
                Layout         = pl
            };

            wrapperLog.ActivateOptions();
            appenders.Add(wrapperLog);

            // Also display logs in CLI if required
            if (enableCLILogging)
            {
                var consoleAppender = new ConsoleAppender
                {
                    Name      = "Wrapper console log",
                    Threshold = consoleLogLevel,
                    Layout    = pl,
                };
                consoleAppender.ActivateOptions();
                appenders.Add(consoleAppender);
            }

            // System log
            var systemEventLogger = new ServiceEventLogAppender
            {
                Name      = "System event log",
                Threshold = eventLogLevel,
                provider  = eventLogProvider
            };

            systemEventLogger.ActivateOptions();
            appenders.Add(systemEventLogger);

            BasicConfigurator.Configure(
#if NETCOREAPP
                LogManager.GetRepository(Assembly.GetExecutingAssembly()),
#endif
                appenders.ToArray());
        }
Ejemplo n.º 38
0
        // this is an attempt to get rid of the extra command line step for printing pdfs.
        // it also uses the display names inside the idw for the pdf names rather than getting it from a Vault property.
        public Boolean printToPDF(string idw, string outputFolder, string pdfPrinterName, string psToPdfProgName, string ghostScriptWorkingFolder, ref string errMessage, ref string logMessage)
        {
            {
                try
                {
                    // set log file location
                    XmlConfigurator.Configure();
                    log4net.Repository.Hierarchy.Hierarchy h =
                        (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
                    foreach (IAppender a in h.Root.Appenders)
                    {
                        if (a is FileAppender)
                        {
                            FileAppender fa = (FileAppender)a;
                            // Programmatically set this to the desired location here
                            string logFileLocation = outputFolder + "PDFPrint.log";

                            // Uncomment the lines below if you want to retain the base file name
                            // and change the folder name...
                            //FileInfo fileInfo = new FileInfo(fa.File);
                            //logFileLocation = string.Format(@"C:\MySpecialFolder\{0}", fileInfo.Name);

                            fa.File = logFileLocation;
                            fa.ActivateOptions();
                            break;
                        }
                    }

                    InventorApprentice.ApprenticeServerComponent       oApprentice = new ApprenticeServerComponent();
                    InventorApprentice.ApprenticeServerDrawingDocument drgDoc;
                    oApprentice.Open(idw);
                    drgDoc = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    int           pageCount            = 1;
                    List <string> assemblyFileNameList = new List <string>();

                    idwFile idwFileToPrint = new idwFile();
                    idwFileToPrint.sheetNames = new List <string>();
                    idwFileToPrint.idwName    = idw;
                    idwFileToPrint.pageCount  = drgDoc.Sheets.Count;

                    foreach (Sheet sh in drgDoc.Sheets)
                    {
                        if (sh.DrawingViews.Count > 0)
                        {
                            string modelName;
                            modelName = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;
                            // this doesn't work right on files with special characters.
                            //modelName = Path.GetFileNameWithoutExtension(modelName);

                            if (modelName.EndsWith(".ipt") || modelName.EndsWith(".iam"))
                            {
                                int index = modelName.LastIndexOf('.');
                                modelName = index == -1 ? modelName: modelName.Substring(0, index);
                            }

                            idwFileToPrint.sheetNames.Add(modelName);
                            pageCount++;
                        }
                    }

                    log.Info("Sheet Names All Read When Printing " + idwFileToPrint.idwName);

                    string printer      = pdfPrinterName;
                    string pdfConverter = psToPdfProgName;
                    string workingDir   = ghostScriptWorkingFolder;

                    string psFileName  = "";
                    string pdfFileName = "";

                    try
                    {
                        InventorApprentice.ApprenticeDrawingPrintManager pMgr;
                        drgDoc       = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                        pMgr         = (InventorApprentice.ApprenticeDrawingPrintManager)drgDoc.PrintManager;
                        pMgr.Printer = printer;
                        int actualSheetIndex   = 1;
                        int modifiedSheetIndex = 1;

                        foreach (Sheet sh in drgDoc.Sheets)
                        {
                            string modelName;
                            //string modelExtension;
                            if (sh.DrawingViews.Count > 0)  // added to make sure sheet has at least one drawing view
                            {
                                modelName = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;

                                // this doesn't work right on files with special characters.
                                //modelName = Path.GetFileNameWithoutExtension(modelName);

                                if (modelName.EndsWith(".ipt") || modelName.EndsWith(".iam"))
                                {
                                    int index = modelName.LastIndexOf('.');
                                    modelName = index == -1 ? modelName : modelName.Substring(0, index);
                                }

                                string newName = "";

                                switch (sh.Orientation)
                                {
                                case PageOrientationTypeEnum.kLandscapePageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kLandscapeOrientation;
                                    break;

                                case PageOrientationTypeEnum.kDefaultPageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kDefaultOrientation;
                                    break;

                                case PageOrientationTypeEnum.kPortraitPageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kPortraitOrientation;
                                    break;
                                }
                                pMgr.SetSheetRange(actualSheetIndex, actualSheetIndex);
                                pMgr.PrintRange = PrintRangeEnum.kPrintSheetRange;
                                pMgr.ScaleMode  = InventorApprentice.PrintScaleModeEnum.kPrintBestFitScale;


                                //if (more than one matching pdf name)
                                if (idwFileToPrint.sheetNames.Where(x => x.Equals(idwFileToPrint.sheetNames[modifiedSheetIndex - 1])).Count() > 1)
                                {
                                    newName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                                    if (System.IO.File.Exists(outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf"))
                                    {
                                        assemblyFileNameList.Add(newName);
                                        newName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + "~" + 1 + ".pdf";
                                        if (System.IO.File.Exists(newName))
                                        {
                                            System.IO.File.Delete(newName);
                                        }
                                        System.IO.File.Move(outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf", newName);
                                        assemblyFileNameList.Add(newName);
                                    }
                                }

                                psFileName  = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".ps";
                                pdfFileName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                                // for some reason if a ps filename contains a comma it doesn't want to print.
                                // we'll replace it with a tilde.
                                if (psFileName.Contains(","))
                                {
                                    psFileName = psFileName.Replace(',', '~');
                                    log.Warn("One or more characters replaced with '~' in " + pdfFileName);
                                    //logMessage += "One or more characters replaced with '~' in " + pdfFileName + "\r\n";
                                }

                                if (psFileName.Contains("°"))
                                {
                                    psFileName = psFileName.Replace('°', '~');
                                    log.Warn("One or more characters replaced with '°' in " + pdfFileName);
                                    //logMessage += "One or more characters replaced with '°' in " + pdfFileName + "\r\n";
                                }

                                pMgr.PrintToFile(psFileName);

                                if (System.IO.File.Exists(psFileName))
                                {
                                    log.Info("PS file generated for " + psFileName);
                                }
                                else
                                {
                                    log.Warn("PS file for " + psFileName + "could not be generated.");
                                    continue;   // skip trying to create a pdf if we couldn't generate a ps
                                }

                                // notice:
                                // gs doesn't seem to be able to handle the degree symbol
                                // all filenames with a degree symbol will lose it when run through this script

                                Process oProc = new Process();
                                // need the full path to the program if we want to set UseShellExecute to false
                                ProcessStartInfo startInfo = new ProcessStartInfo(pdfConverter);
                                startInfo.WorkingDirectory      = workingDir;
                                startInfo.Arguments             = @"""" + psFileName + @"""" + " " + @"""" + pdfFileName + @"""";
                                startInfo.CreateNoWindow        = true;
                                oProc.StartInfo                 = startInfo;
                                oProc.StartInfo.UseShellExecute = false;
                                oProc.Start();
                                oProc.WaitForExit();


                                if (assemblyFileNameList != null)
                                {
                                    if (assemblyFileNameList.Count > 1)   // combine multiple assembly drawings into one pdf file
                                    {
                                        // Open the input files
                                        PdfDocument inputDocument1 = new PdfDocument();
                                        PdfDocument inputDocument2 = new PdfDocument();

                                        if (System.IO.File.Exists(assemblyFileNameList[0]))
                                        {
                                            inputDocument1 = PdfReader.Open(assemblyFileNameList[0], PdfDocumentOpenMode.Import);
                                        }

                                        if (System.IO.File.Exists(assemblyFileNameList[1]))
                                        {
                                            inputDocument2 = PdfReader.Open(assemblyFileNameList[1], PdfDocumentOpenMode.Import);
                                        }

                                        // Create the output document
                                        PdfDocument outputDocument = new PdfDocument();

                                        // Show consecutive pages facing. Requires Acrobat 5 or higher.
                                        outputDocument.PageLayout = inputDocument1.PageLayout;

                                        int count = Math.Max(inputDocument1.PageCount, inputDocument2.PageCount);
                                        for (int idx = 0; idx < count; idx++)
                                        {
                                            PdfPage page1 = new PdfPage();
                                            PdfPage page2 = new PdfPage();

                                            if (inputDocument1.PageCount > idx)
                                            {
                                                page1 = inputDocument1.Pages[idx];
                                                page1 = outputDocument.AddPage(page1);
                                            }

                                            if (inputDocument2.PageCount > idx)
                                            {
                                                page2 = inputDocument2.Pages[idx];
                                                page2 = outputDocument.AddPage(page2);
                                            }
                                        }

                                        if (System.IO.File.Exists(assemblyFileNameList[0]))
                                        {
                                            System.IO.File.Delete(assemblyFileNameList[0]);
                                        }

                                        // Save the document...
                                        while (!(System.IO.File.Exists(assemblyFileNameList[0])))
                                        {
                                            string filename = assemblyFileNameList[0];
                                            outputDocument.Save(filename);
                                        }

                                        // delete the temp file and clear the list
                                        if (System.IO.File.Exists(assemblyFileNameList[1]))
                                        {
                                            System.IO.File.Delete(assemblyFileNameList[1]);
                                        }

                                        assemblyFileNameList.Clear();
                                    }
                                }

                                System.IO.File.Delete(psFileName);
                                actualSheetIndex++;
                                modifiedSheetIndex++;
                            }
                            else
                            {
                                actualSheetIndex++;   // still need to increment sheet index, even if no drawing view was found
                                                      // on current sheet...
                            }

                            // double check to make sure file got generated and saved properly.
                            if (!System.IO.File.Exists(pdfFileName))
                            {
                                log.Warn("No PDF Generated for " + pdfFileName);
                                //logMessage += "No PDF Generated for " + pdfFileName + "\r\n";
                            }
                            else
                            {
                                log.Info("PDF Generated for " + pdfFileName);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //errMessage += "PDF Generation Error in printToPDF\r\n";
                        //errMessage += ex.Message + "\r\n";
                        log.Error("PDF Generation Error in printToPDF");
                        log.Error(ex.Message);
                        return(false);
                    }
                }

                catch (Exception ex)
                {
                    //errMessage += "IDW File Read Error in printToPDF\r\n";
                    //errMessage += ex.Message + "\r\n";
                    log.Error("IDW File Read Error in printToPDF");
                    log.Error(ex.Message);
                    return(false);
                }
                return(true);
            }
        }
Ejemplo n.º 39
0
        public void RegisterCommonAppenders(IConfig startupConfig)
        {
            ILoggerRepository repository = LogManager.GetRepository();

            IAppender[] appenders = repository.GetAppenders();

            foreach (IAppender appender in appenders)
            {
                if (appender.Name == "Console")
                {
                    m_consoleAppender = (OpenSimAppender)appender;
                }
                else if (appender.Name == "LogFileAppender")
                {
                    m_logFileAppender = (FileAppender)appender;
                }
                else if (appender.Name == "StatsLogFileAppender")
                {
                    m_statsLogFileAppender = (FileAppender)appender;
                }
            }

            if (null == m_consoleAppender)
            {
                Notice("No appender named Console found (see the log4net config file for this executable)!");
            }
            else
            {
                // FIXME: This should be done through an interface rather than casting.
                m_consoleAppender.Console = (ConsoleBase)m_console;

                // If there is no threshold set then the threshold is effectively everything.
                if (null == m_consoleAppender.Threshold)
                {
                    m_consoleAppender.Threshold = Level.All;
                }

                Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
            }

            if (m_logFileAppender != null && startupConfig != null)
            {
                string cfgFileName = startupConfig.GetString("LogFile", null);
                if (cfgFileName != null)
                {
                    m_logFileAppender.File = cfgFileName;
                    m_logFileAppender.ActivateOptions();
                }

                m_log.InfoFormat("[SERVER BASE]: Logging started to file {0}", m_logFileAppender.File);
            }

            if (m_statsLogFileAppender != null && startupConfig != null)
            {
                string cfgStatsFileName = startupConfig.GetString("StatsLogFile", null);
                if (cfgStatsFileName != null)
                {
                    m_statsLogFileAppender.File = cfgStatsFileName;
                    m_statsLogFileAppender.ActivateOptions();
                }

                m_log.InfoFormat("[SERVER BASE]: Stats Logging started to file {0}", m_statsLogFileAppender.File);
            }
        }
Ejemplo n.º 40
0
        protected void ConfigureAppenders(string fileName)
        {
            //Get the logger repository hierarchy.
            if (!(LogManager.GetRepository(Assembly.GetCallingAssembly()) is Hierarchy repository))
            {
                throw new Exception("log4net repository was not configured");
            }

            if (!(repository.GetLogger(_loggerName) is Logger logger))
            {
                throw new Exception($"Logger '{_loggerName}' not found");
            }

            #region Configure signalRAppender

            if (logger.Appenders.OfType <SignalrAppender>().All(a => a.GroupName != _logGroupName))
            {
                //var hub = GlobalHost.ConnectionManager.GetHubContext<SignalrAppenderHub>();
                var hubContext      = _iocResolver.Resolve <IHubContext <SignalrAppenderHub> >();
                var signalrAppender = new SignalrAppender(hubContext, _logGroupName)
                {
                    Name      = _loggerName + "SignalrAppenderAuto",
                    Threshold = Level.All,
                };

                var signalrLayout = new PatternLayout()
                {
                    ConversionPattern = "%d - %m%n%n"
                };

                signalrLayout.ActivateOptions();
                signalrAppender.Layout = signalrLayout;
                signalrAppender.ActivateOptions();

                logger.AddAppender(signalrAppender);
            }

            #endregion

            #region Configure file appender

            if (!string.IsNullOrWhiteSpace(fileName))
            {
                var fileAppender = new FileAppender
                {
                    Name         = _loggerName + "FileAppenderAuto",
                    File         = fileName,
                    AppendToFile = false,
                    Threshold    = Level.All,
                    LockingModel = new FileAppender.MinimalLock()
                };
                //new log4net.Util.PatternString("D:\Temp\Logs\%property{LogName}.log")

                var fileLayout = new PatternLayout()
                {
                    ConversionPattern = "%d - %m%n%n"
                };

                fileLayout.ActivateOptions();
                fileAppender.Layout = fileLayout;
                fileAppender.ActivateOptions();

                logger.AddAppender(fileAppender);
            }

            #endregion

            // Mark repository as configured and notify that is has changed.
            repository.Configured = true;
            repository.RaiseConfigurationChanged(EventArgs.Empty);

            _logger = LogManager.GetLogger(Assembly.GetCallingAssembly(), _loggerName);
        }
Ejemplo n.º 41
0
        public PlayerActionPredictionProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl)
            : base(information, InfoProviderType.PlayerActionPrediction, allInformationProviders, aiRandomControl)
        {
            requiredInfoTypes = new List <InfoType>()
            {
                InfoType.CP_AKQToBoardRatio_Real,                                       //Same for all
                InfoType.CP_AOnBoard_Bool,                                              //Same for all
                InfoType.CP_FlushPossible_Bool,                                         //Same for all
                InfoType.CP_KOnBoard_Bool,                                              //Same for all
                InfoType.CP_StraightPossible_Bool,                                      //Same for all
                InfoType.GP_GameStage_Byte,                                             //Same for all
                InfoType.GP_NumActivePlayers_Byte,                                      //Provided
                InfoType.GP_NumPlayersDealtIn_Byte,                                     //Same for all
                InfoType.GP_NumTableSeats_Byte,                                         //Same for all
                InfoType.GP_NumUnactedPlayers_Byte,                                     //Provided
                InfoType.BP_BetsToCall_Byte,                                            //Provided
                InfoType.BP_LastRoundBetsToCall_Byte,                                   // ********* From CACHE
                InfoType.BP_MinimumPlayAmount_Decimal,                                  //Provided
                InfoType.BP_PlayerLastAction_Short,                                     // ********* From CACHE
                InfoType.BP_PlayerMoneyInPot_Decimal,                                   // ********* From CACHE
                InfoType.BP_TotalNumCalls_Byte,                                         //Provided
                InfoType.BP_TotalNumRaises_Byte,                                        //Provided
                InfoType.BP_TotalPotAmount_Decimal,                                     //Provided
                InfoType.BP_LastAdditionalRaiseAmount,
                InfoType.GP_DealerDistance_Byte,                                        // ********* From CACHE
                InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double                          //We don't actually need this we just want to make sure the agression provider has been added
            };

            providedInfoTypes = new List <InfoPiece>()
            {
                new InfoPiece(InfoType.PAP_RaiseToStealAmount_Amount, 0),
                new InfoPiece(InfoType.PAP_RaiseToStealSuccess_Prob, 0),
                new InfoPiece(InfoType.PAP_RaiseToCallAmount_Amount, 0),
                new InfoPiece(InfoType.PAP_RaiseToBotCall_Prob, 1),
                new InfoPiece(InfoType.PAP_FoldToBotCall_Prob, 0),
                new InfoPiece(InfoType.PAP_RaiseToBotCheck_Prob, 1),
            };
            AddProviderInformationTypes();

            //Create the player action prediction network manager if it's has not already been created.
            if (networkManager == null)
            {
                networkManager = new playerActionPredictionNetworkManager();
            }

#if logging
            //If we are logging configure the logger
            ILoggerRepository            repository             = LogManager.GetRepository(Assembly.GetCallingAssembly());
            IBasicRepositoryConfigurator configurableRepository = repository as IBasicRepositoryConfigurator;

            PatternLayout layout = new PatternLayout();
            layout.ConversionPattern = "%level% [%thread%] - %message%newline";
            layout.ActivateOptions();

            FileAppender appender = new FileAppender();
            appender.Layout       = layout;
            appender.File         = "aiDecisions_PAP.csv";
            appender.AppendToFile = true;
            appender.ActivateOptions();
            configurableRepository.Configure(appender);
#endif
        }
Ejemplo n.º 42
0
        // Handle all the automagical stuff
        //
        public ServicesServerBase(string prompt, string[] args) : base()
        {
            // Save raw arguments
            //
            m_Arguments = args;

            // Read command line
            //
            ArgvConfigSource argvConfig = new ArgvConfigSource(args);

            argvConfig.AddSwitch("Startup", "console", "c");
            argvConfig.AddSwitch("Startup", "logfile", "l");
            argvConfig.AddSwitch("Startup", "inifile", "i");
            argvConfig.AddSwitch("Startup", "prompt", "p");
            argvConfig.AddSwitch("Startup", "logconfig", "g");

            // Automagically create the ini file name
            //
            string fileName  = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location);
            string iniFile   = fileName + ".ini";
            string logConfig = null;

            IConfig startupConfig = argvConfig.Configs["Startup"];

            if (startupConfig != null)
            {
                // Check if a file name was given on the command line
                //
                iniFile = startupConfig.GetString("inifile", iniFile);
                //
                // Check if a prompt was given on the command line
                prompt = startupConfig.GetString("prompt", prompt);
                //
                // Check for a Log4Net config file on the command line
                logConfig = startupConfig.GetString("logconfig", logConfig);
            }

            // Find out of the file name is a URI and remote load it
            // if it's possible. Load it as a local file otherwise.
            //
            Uri configUri;

            try
            {
                if (Uri.TryCreate(iniFile, UriKind.Absolute, out configUri) &&
                    configUri.Scheme == Uri.UriSchemeHttp)
                {
                    XmlReader r = XmlReader.Create(iniFile);
                    Config = new XmlConfigSource(r);
                }
                else
                {
                    Config = new IniConfigSource(iniFile);
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Error reading from config source.  {0}", e.Message);
                Environment.Exit(1);
            }

            // Merge the configuration from the command line into the
            // loaded file
            //
            Config.Merge(argvConfig);

            // Refresh the startupConfig post merge
            //
            if (Config.Configs["Startup"] != null)
            {
                startupConfig = Config.Configs["Startup"];
            }

            ConfigDirectory = startupConfig.GetString("ConfigDirectory", ".");

            prompt = startupConfig.GetString("Prompt", prompt);

            // Allow derived classes to load config before the console is
            // opened.
            //
            ReadConfig();

            // Create main console
            //
            string consoleType = "local";

            if (startupConfig != null)
            {
                consoleType = startupConfig.GetString("console", consoleType);
            }

            if (consoleType == "basic")
            {
                MainConsole.Instance = new CommandConsole(prompt);
            }
            else if (consoleType == "rest")
            {
                MainConsole.Instance = new RemoteConsole(prompt);
                ((RemoteConsole)MainConsole.Instance).ReadConfig(Config);
            }
            else
            {
                MainConsole.Instance = new LocalConsole(prompt);
            }

            m_console = MainConsole.Instance;

            // Configure the appenders for log4net
            //
            OpenSimAppender consoleAppender = null;
            FileAppender    fileAppender    = null;

            if (logConfig != null)
            {
                FileInfo cfg = new FileInfo(logConfig);
                XmlConfigurator.Configure(cfg);
            }
            else
            {
                XmlConfigurator.Configure();
            }

            RegisterCommonAppenders(startupConfig);

            if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
            {
                CreatePIDFile(startupConfig.GetString("PIDFile"));
            }

            RegisterCommonCommands();

            // Register the quit command
            //
            MainConsole.Instance.Commands.AddCommand("General", false, "quit",
                                                     "quit",
                                                     "Quit the application", HandleQuit);

            MainConsole.Instance.Commands.AddCommand("General", false, "shutdown",
                                                     "shutdown",
                                                     "Quit the application", HandleQuit);

            // Allow derived classes to perform initialization that
            // needs to be done after the console has opened
            //
            Initialise();
        }