public void Log_writes_xml_to_output_stream() { var stream = new MemoryStream(); var writer = new StreamWriter(stream); var fileLogWriter = new FileLogWriter((dir, file) => writer); const LogLevel level = LogLevel.Error; const String message = "Test"; fileLogWriter.Log(level, message); stream.Seek(0, SeekOrigin.Begin); var lDocument = new XmlDocument(); using (var xmlReader = XmlReader.Create(stream, new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment })) { lDocument.Load(xmlReader); } var lRootElement = lDocument.FirstChild as XmlElement; Assert.IsNotNull(lRootElement); Assert.AreEqual(level.ToString().ToLower(), lRootElement.Name); Assert.IsTrue(lRootElement.HasAttribute(Resources.TimestampAttributeName)); // Check timestamp attribute contains a parseable datetime representation. // The actual value isn't important and will change each time the test is run anyway. DateTime datetime; Assert.IsTrue(DateTime.TryParse(lRootElement.GetAttribute(Resources.TimestampAttributeName), out datetime)); Assert.IsTrue(lRootElement.HasAttribute(Resources.MessageAttributeName)); Assert.AreEqual(message, lRootElement.GetAttribute(Resources.MessageAttributeName)); }
public void Log_flushes_output_stream() { var writer = Substitute.For<TextWriter>(); var fileLogWriter = new FileLogWriter((dir, file) => writer); fileLogWriter.Log(LogLevel.Error, null); writer.Received().Flush(); }
public App() { if (s_instanceMutex.WaitOne(TimeSpan.Zero, true)) { s_ownsInstanceMutex = true; } else { s_ownsInstanceMutex = false; MessageBox.Show("The application is already running.", "MultiClip", MessageBoxButton.OK, MessageBoxImage.Asterisk); Environment.Exit(0); } DispatcherUnhandledException += OnDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += OnDomainUnhandledException; // Set up the default logger instance. LogLevel logLevel; ILogFormatter logFormatter; ILogWriter logWriter = new FileLogWriter(Environment.ExpandEnvironmentVariables("%localappdata%\\MultiClip\\Logs.txt"), Encoding.UTF8); #if DEBUG logLevel = LogLevel.Trace; logFormatter = new JsonLogFormatter(Formatting.Indented); #else logLevel = LogLevel.Information; logFormatter = new JsonLogFormatter(Formatting.None); #endif Logger.Default = new Logger(logLevel, logFormatter, logWriter); // Set up the global application state. AppState.Current = new AppState { UserSettings = UserSettings.LoadFromDisk(), ClipboardStates = new ObservableCollection <Clipboard.ClipboardState>(), }; // Set the required registry keys. SetRegistryValues(); }
public void Log_writes_xml_to_output_stream() { var stream = new MemoryStream(); var writer = new StreamWriter(stream); var fileLogWriter = new FileLogWriter((dir, file) => writer); const LogLevel level = LogLevel.Error; const String message = "Test"; fileLogWriter.Log(level, message); stream.Seek(0, SeekOrigin.Begin); var lDocument = new XmlDocument(); using (var xmlReader = XmlReader.Create(stream, new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment })) { lDocument.Load(xmlReader); } var lRootElement = lDocument.FirstChild as XmlElement; Assert.IsNotNull(lRootElement); Assert.AreEqual(level.ToString().ToLower(), lRootElement.Name); Assert.IsTrue(lRootElement.HasAttribute(Resources.TimestampAttributeName)); // Check timestamp attribute contains a parseable datetime representation. // The actual value isn't important and will change each time the test is run anyway. DateTime datetime; Assert.IsTrue(DateTime.TryParse(lRootElement.GetAttribute(Resources.TimestampAttributeName), out datetime)); Assert.IsTrue(lRootElement.HasAttribute(Resources.MessageAttributeName)); Assert.AreEqual(message, lRootElement.GetAttribute(Resources.MessageAttributeName)); }
public void Write(string category, string source, Exception exception) { if (exception == null) { return; } Guid id = Guid.NewGuid(); LogEntity log = new LogEntity(); log.Id = id; log.Category = category; log.Source = source; log.Type = (short)LogType.Error; log.Message = exception.Message; LogDetailEntity logDetail = new LogDetailEntity(); logDetail.Id = id; logDetail.LogDetail = LogHelper.GetExceptionMessage(exception); try { using (ILHDBTran tran = BeginTran()) { LogManager manager = new LogManager(tran); manager.AddLog(log); manager.AddLogDetail(logDetail); tran.Commit(); } } catch (Exception ex) { FileLogWriter writer = new FileLogWriter(); writer.Write(LogCategory.LogWrite, "Write log to database", ex); writer.Write(category, source, exception); } }
public void FallbackWriteTest() { FileLogWriter target; //FileLogWriter_Accessor accessor; TestLogWriter fallbackWriter = new TestLogWriter(); target = new FileLogWriter(Path.Combine(TestContext.DeploymentDirectory, "testlog.txt"), LogSyncMode.Message, fallbackWriter); // Writing should be successful, fallback write should not be called. target.WriteLine("Hello"); Assert.IsFalse(fallbackWriter.FlushWasInvoked); Assert.IsFalse(fallbackWriter.WriteLineWasInvoked); Assert.IsFalse(fallbackWriter.WriteWasInvoked); target = new FileLogWriter("c:\\this_dir_does_not_exist\\testlog.txt", LogSyncMode.Message, fallbackWriter); // First time printing will cause an exception and will print to the fallback writer. target.WriteLine("Hello"); Assert.IsTrue(fallbackWriter.WriteWasInvoked); // At this point the fallback writer has an exception message from the Open operation. fallbackWriter.ResetInvocationIndicators(); fallbackWriter.ClearOutput(); target.WriteLine("Hello"); string expected = "Hello" + "$n"; string actual = fallbackWriter.Output.ToString().Replace(Environment.NewLine, "$n"); Assert.AreEqual(expected, actual); fallbackWriter.ResetInvocationIndicators(); fallbackWriter.ClearOutput(); target.Write("Hello"); expected = "Hello"; actual = fallbackWriter.Output.ToString().Replace(Environment.NewLine, "$n"); Assert.AreEqual(expected, actual); }
public void TestWriteToLogFile() { var tmpFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData) + @"\" + Guid.NewGuid().ToString(); var conf = new MonitorConfiguration() { LogLevel = "Info", LogFilePath = tmpFolder + @"\test.log" }; var logWriter = new FileLogWriter(conf); String logContent = Guid.NewGuid().ToString(); logWriter.Write(LogLevel.Info, logContent); Assert.IsTrue(File.Exists(conf.LogFilePath)); String log = File.ReadAllText(conf.LogFilePath); Assert.IsTrue(log.Contains(logContent)); Directory.Delete(tmpFolder, true); }
public void Log_silently_does_nothing_if_stream_is_null() { var fileLogWriter = new FileLogWriter((dir, file) => null); fileLogWriter.Log(LogLevel.Error, null); }
public void TestRotateLog() { var tmpFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData) + @"\" + Guid.NewGuid().ToString(); Console.WriteLine(tmpFolder); Directory.CreateDirectory(tmpFolder); var conf = new MonitorConfiguration() { LogLevel = "Info", LogFilePath = tmpFolder + @"\test.log", LogFileSize = 1, MaxLogRetention = 2 }; var logWriter = new FileLogWriter(conf); String[] logContent = new String[4] { "Test 0", "Test 1", "Test 2", "Test 3", }; //echo "Test 0" > test.log logWriter.Write(LogLevel.Info, logContent[0]); //mv test.log test.log.0 //echo "Test 1" > test.log logWriter.Write(LogLevel.Info, logContent[1]); Assert.IsTrue(File.Exists(conf.LogFilePath)); String log = File.ReadAllText(conf.LogFilePath); Assert.IsTrue(log.Contains(logContent[1])); Assert.IsTrue(File.Exists(conf.LogFilePath + @".0")); log = File.ReadAllText(conf.LogFilePath + @".0"); Assert.IsTrue(log.Contains(logContent[0])); //mv test.log.0 test.log.1 //mv test.log test.log.0 //echo "Test 2" > test.log logWriter.Write(LogLevel.Info, logContent[2]); //rm test.log.1 //mv test.log.0 test.log.1 //mv test.log test.log.0 //echo "Test 3" test.log logWriter.Write(LogLevel.Info, logContent[3]); Assert.IsTrue(File.Exists(conf.LogFilePath + @".0")); Assert.IsTrue(File.Exists(conf.LogFilePath + @".1")); Assert.IsFalse(File.Exists(conf.LogFilePath + @".2")); log = File.ReadAllText(conf.LogFilePath); Assert.IsTrue(log.Contains(logContent[3])); log = File.ReadAllText(conf.LogFilePath + @".1"); Assert.IsTrue(log.Contains(logContent[1])); Directory.Delete(tmpFolder, true); }
public void WorksWithoutArchiver() { Writer = new FileLogWriter(FileInfo, Formatter.Object, null, FileService.Object, DirectoryServie.Object); Writer.Write(LogInfo); }
private static void Main() { try { FileLogWriter logWriter = null; IConfigManager config = new AppConfigConfigurator(); bool interactiveConsole = config.GetSettingAsInt("interactive_console", 0) == 1; if (config.GetSettingAsInt("log_to_console", 0) == 0) { if (config.GetSettingAsInt("overwrite_log_file", 0) == 1) { logWriter = new FileLogWriter( Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "logs"), "TrackCycle.log") { LogWithTimestamp = true }; } else { logWriter = new FileLogWriter( Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "logs"), DateTime.UtcNow.ToString("yyyyMMdd_HHmmss") + "_Startup.log") { LogWithTimestamp = true }; } } try { trackCycler = new TrackCyclePlugin(); AcServerPluginManager pluginManager = new AcServerPluginManager(logWriter, config); pluginManager.LoadInfoFromServerConfig(); pluginManager.AddPlugin(trackCycler); pluginManager.LoadPluginsFromAppConfig(); if (!MonoHelper.IsLinux) { // Some boilerplate to react to close window event, CTRL-C, kill, etc _handler += new EventHandler(Handler); SetConsoleCtrlHandler(_handler, true); } trackCycler.StartServer(); Console.Out.WriteLine("Server running..."); if (interactiveConsole) { Console.Out.WriteLine("Write 'next_track' to cycle to the next track."); Console.Out.WriteLine("Write 'exit' to shut the server down."); } while (true) { if (interactiveConsole) { string line = Console.ReadLine(); if (line.ToLower() == "exit") { break; } else if (line.ToLower() == "next_track") { trackCycler.NextTrackAsync(true); } else { pluginManager.BroadcastChatMessage(line); } } else { Thread.Sleep(500); } } trackCycler.StopServer(); } catch (Exception ex) { if (logWriter != null) { logWriter.Log(ex); } else { throw; } } if (logWriter != null) { logWriter.StopLoggingToFile(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void Log_silently_does_nothing_if_stream_is_null() { var fileLogWriter = new FileLogWriter((dir, file) => null); fileLogWriter.Log(LogLevel.Error, null); }