x) Thread my logger. It now doesnt impact the main threads

This commit is contained in:
Marc Hernandez 2021-01-02 17:40:27 -08:00 committed by Marc Hernandez
parent 065ec3b237
commit c4f1dd5edb

View File

@ -6,6 +6,9 @@ using System.Runtime.CompilerServices;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Reflection; using System.Reflection;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading;
//using System.Threading.Tasks; //using System.Threading.Tasks;
static public class log static public class log
@ -92,7 +95,7 @@ static public class log
var evt = CreateLogEvent( LogType.Info, msg, "System", null ); var evt = CreateLogEvent( LogType.Info, msg, "System", null );
writeToAll( evt ); s_events.Enqueue( evt );
stop(); stop();
} }
@ -102,8 +105,19 @@ static public class log
{ {
var logEvent = new LogEvent( logType, msg, path, line, member, cat, obj ); var logEvent = new LogEvent( logType, msg, path, line, member, cat, obj );
return logEvent; static internal ConcurrentQueue<LogEvent> s_events = new ConcurrentQueue<LogEvent>();
private Thread m_thread;
/*
static public Log log
{
get
{
return s_log;
} }
}
*/
@ -157,6 +171,19 @@ static public class log
} }
} }
static public void log( string msg, LogType type = LogType.Debug, string path = "", int line = -1, string member = "", string cat = "unk", object obj = null )
{
var evt = new LogEvent( type, msg, path, line, member, cat, obj );
s_events.Enqueue( evt );
/*
lock( s_log )
{
s_log.writeToAll( evt );
}
*/
}
static public void logProps( object obj, string header, LogType type = LogType.Debug, string cat = "", string prefix = "", [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" ) static public void logProps( object obj, string header, LogType type = LogType.Debug, string cat = "", string prefix = "", [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{ {
var list = refl.GetAllProperties( obj.GetType() ); var list = refl.GetAllProperties( obj.GetType() );
@ -166,7 +193,13 @@ static public class log
var evt = new LogEvent( type, header, path, line, member, cat, obj ); var evt = new LogEvent( type, header, path, line, member, cat, obj );
//var evt = CreateLogEvent( type, header, cat, obj ); //var evt = CreateLogEvent( type, header, cat, obj );
writeToAll( evt ); //lock( s_log )
{
var evt = CreateLogEvent( type, header, cat, obj );
s_events.Enqueue( evt );
//s_log.writeToAll( evt );
foreach( var pi in list ) foreach( var pi in list )
{ {
@ -200,8 +233,15 @@ static public class log
} }
static private void createLog( string filename ) private Log( string filename )
{ {
var start = new ThreadStart( run );
m_thread = new Thread( start );
m_thread.Start();
//TODO: Fix this so itll work without a directory.
Directory.CreateDirectory( Path.GetDirectoryName( filename ) );
string dir = Path.GetDirectoryName( filename ); string dir = Path.GetDirectoryName( filename );
@ -218,23 +258,42 @@ static public class log
//Debug.Listeners.Add( this ); //Debug.Listeners.Add( this );
string msg = "\n==============================================================================\nLogfile " + filename + " startup at " + DateTime.Now.ToString(); s_events.Enqueue( evt );
//writeToAll( evt );
}
var evt = CreateLogEvent( LogType.Info, msg, "System", null ); var evt = CreateLogEvent( LogType.Info, msg, "System", null );
writeToAll( evt ); writeToAll( evt );
} }
/* bool m_running = true;
static public override void Write( string msg ) {
WriteLine( msg ); void run()
{
while( m_running )
{
while( s_events.TryDequeue( out var evt ) )
{
writeToAll( evt );
} }
static public override void WriteLine( string msg ) { Thread.Sleep( 0 );
error( msg ); }
//base.WriteLine( msg ); }
void stop()
{
m_running = false;
m_writer.Close();
m_stream.Close();
m_errorWriter.Close();
m_errorStream.Close();
} }
*/
static void stop() static void stop()
{ {