예제 #1
0
            // Log a statement
            public static void log(LogSeverity log_severity, string log_message)
            {
                if (running == false)
                {
                    String formattedMessage = String.Format("!!! {0}|{1}|({2}): {3}",
                                                            DateTime.Now.ToString("MM-dd HH:mm:ss.ffff"),
                                                            log_severity.ToString(),
                                                            Thread.CurrentThread.ManagedThreadId,
                                                            log_message);
                    if (consoleOutput)
                    {
                        Console.WriteLine(formattedMessage);
                    }
                    return;
                }

                LogStatement statement = new LogStatement
                {
                    threadId = Thread.CurrentThread.ManagedThreadId,
                    severity = log_severity,
                    message  = log_message,
                    time     = DateTime.Now.ToString("MM-dd HH:mm:ss.ffff")
                };

                lock (statements)
                {
                    statements.Add(statement);
                }
            }
예제 #2
0
            // Storage thread
            private static void threadLoop()
            {
                LogStatement statement     = new LogStatement();
                bool         message_found = false;

                while (running)
                {
                    TLC.Report();
                    message_found = false;

                    lock (statements)
                    {
                        if (statements.Count() > 0)
                        {
                            LogStatement candidate = statements[0];
                            statement = candidate;
                            statements.Remove(candidate);
                            message_found = true;
                        }
                    }

                    if (message_found)
                    {
                        log_internal(statement.severity, statement.message, statement.threadId, statement.time);
                    }
                    else
                    {
                        // Sleep for 25ms to prevent cpu waste
                        Thread.Sleep(25);
                    }
                    Thread.Yield();
                }
            }
예제 #3
0
        /// <summary>
        ///  Sends a message to the log.
        /// </summary>
        /// <remarks>
        ///  This should almost never be called directly, but rather through one of the helper functions.
        /// </remarks>
        /// <param name="log_severity">Severity of the log message.</param>
        /// <param name="log_message">Text to write into the log.</param>
        public static void log(LogSeverity log_severity, string log_message)
        {
            if ((verbosity & (int)log_severity) != (int)log_severity)
            {
                return;
            }

            if (running == false)
            {
                if (consoleOutput)
                {
                    string formattedMessage = "!!! " + DateTime.Now.ToString("MM-dd HH:mm:ss.ffff") + "|" + log_severity + "|" + Thread.CurrentThread.ManagedThreadId + ": " + log_message;
                    Console.WriteLine(formattedMessage);
                }

                return;
            }

            LogStatement statement = new LogStatement
            {
                threadId = Thread.CurrentThread.ManagedThreadId,
                severity = log_severity,
                message  = log_message,
                time     = DateTime.Now
            };

            lock (statements)
            {
                statements.Add(statement);
            }
        }
예제 #4
0
 public void WriteLine(string message)
 {
     lock (_logStatementBuffer)
     {
         var ls = new LogStatement(true, message);
         _logStatementBuffer.Add(ls);
     }
     _addedToList.Set();
 }
예제 #5
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            var statement = new LogStatement()
            {
                Level     = logLevel,
                Exception = exception,
                Message   = formatter(state, exception)
            };

            LogStatements.Add(statement);
        }
예제 #6
0
 private static ExtendedRichDescription GetStatementDescription(LogStatement statement)
 {
     return(new ExtendedRichDescription(
                new RichDescription(
                    "Log ",
                    new Hilite(statement.Text)
                    ),
                new RichDescription(
                    "as ",
                    new Hilite(statement.Level.ToString())
                    )
                ));
 }
예제 #7
0
        // Storage thread
        private static void threadLoop()
        {
            LogStatement statement     = new LogStatement();
            bool         message_found = false;

            long last_flush = Clock.getTimestamp();

            while (running)
            {
                TLC.Report();
                message_found = false;

                lock (statements)
                {
                    if (statements.Count() > 0)
                    {
                        statement = statements[0];
                        statements.RemoveAt(0);
                        message_found = true;
                    }
                }

                if (message_found)
                {
                    log_internal(statement.severity, statement.message, statement.threadId, statement.time.ToString("MM-dd HH:mm:ss.ffff"));
                }
                else
                {
                    // Sleep for 25ms to prevent cpu waste
                    Thread.Sleep(25);
                }
                long cur_time = Clock.getTimestamp();
                if (cur_time - last_flush > 1)
                {
                    last_flush = cur_time;
                    lock (logfilename)
                    {
                        if (logFileStream != null)
                        {
                            logFileStream.Flush();
                        }
                    }
                }
            }
        }
        public void LogStatementIsWrittenToAllSinks()
        {
            // Arrange
            var firstSinkMock  = new Mock <ISink>(MockBehavior.Strict);
            var secondSinkMock = new Mock <ISink>(MockBehavior.Strict);
            var thirdSinkMock  = new Mock <ISink>(MockBehavior.Strict);
            var dispatcher     = new AsyncLogStatementDispatcher(new List <ISink> {
                firstSinkMock.Object, secondSinkMock.Object, thirdSinkMock.Object
            });

            firstSinkMock.Setup(sink => sink.Write(It.IsAny <string>()));
            secondSinkMock.Setup(sink => sink.Write(It.IsAny <string>()));
            thirdSinkMock.Setup(sink => sink.Write(It.IsAny <string>()));

            var logStatement = new LogStatement(DateTimeOffset.UtcNow, LogLevel.Information, "Message");

            // Act
            dispatcher.Dispatch(logStatement);

            // Assert
            firstSinkMock.Verify(sink => sink.Write(logStatement.Render()), Times.Once);
            secondSinkMock.Verify(sink => sink.Write(logStatement.Render()), Times.Once);
            thirdSinkMock.Verify(sink => sink.Write(logStatement.Render()), Times.Once);
        }
예제 #9
0
 bool AbortedByFilter(LogStatement logStatement)
 {
     return _filters.Any(f => !f(logStatement));
 }
예제 #10
0
 bool AbortedByFilter(LogStatement logStatement)
 {
     return(filters.Any(f => !f(logStatement)));
 }
예제 #11
0
			public void WriteLine(string message)
			{
				lock (_logStatementBuffer)
				{
					var ls = new LogStatement(true, message);
					_logStatementBuffer.Add(ls);
				}
				_addedToList.Set();
			}