2023-12-04 14:17:13 +01:00
using Ryujinx.Common ;
2024-01-29 19:58:18 +01:00
using Ryujinx.Common.Configuration ;
2019-12-21 20:52:31 +01:00
using Ryujinx.Common.Logging ;
2023-06-01 15:47:53 +02:00
using Ryujinx.Common.Logging.Targets ;
2019-12-21 20:52:31 +01:00
using System ;
2024-01-29 19:58:18 +01:00
using System.IO ;
2019-12-21 20:52:31 +01:00
2022-05-15 11:30:15 +00:00
namespace Ryujinx.Ui.Common.Configuration
2019-12-21 20:52:31 +01:00
{
public static class LoggerModule
{
public static void Initialize ( )
{
2023-06-29 02:39:22 +02:00
ConfigurationState . Instance . Logger . EnableDebug . Event + = ReloadEnableDebug ;
ConfigurationState . Instance . Logger . EnableStub . Event + = ReloadEnableStub ;
ConfigurationState . Instance . Logger . EnableInfo . Event + = ReloadEnableInfo ;
ConfigurationState . Instance . Logger . EnableWarn . Event + = ReloadEnableWarning ;
ConfigurationState . Instance . Logger . EnableError . Event + = ReloadEnableError ;
ConfigurationState . Instance . Logger . EnableTrace . Event + = ReloadEnableTrace ;
ConfigurationState . Instance . Logger . EnableGuest . Event + = ReloadEnableGuest ;
2019-12-21 20:52:31 +01:00
ConfigurationState . Instance . Logger . EnableFsAccessLog . Event + = ReloadEnableFsAccessLog ;
2023-06-29 02:39:22 +02:00
ConfigurationState . Instance . Logger . FilteredClasses . Event + = ReloadFilteredClasses ;
ConfigurationState . Instance . Logger . EnableFileLog . Event + = ReloadFileLogger ;
2019-12-21 20:52:31 +01:00
}
private static void ReloadEnableDebug ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Debug , e . NewValue ) ;
}
private static void ReloadEnableStub ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Stub , e . NewValue ) ;
}
private static void ReloadEnableInfo ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Info , e . NewValue ) ;
}
private static void ReloadEnableWarning ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Warning , e . NewValue ) ;
}
private static void ReloadEnableError ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Error , e . NewValue ) ;
}
2022-02-18 01:08:07 +01:00
private static void ReloadEnableTrace ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Trace , e . NewValue ) ;
}
2019-12-21 20:52:31 +01:00
private static void ReloadEnableGuest ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . Guest , e . NewValue ) ;
}
private static void ReloadEnableFsAccessLog ( object sender , ReactiveEventArgs < bool > e )
{
Logger . SetEnable ( LogLevel . AccessLog , e . NewValue ) ;
}
private static void ReloadFilteredClasses ( object sender , ReactiveEventArgs < LogClass [ ] > e )
{
bool noFilter = e . NewValue . Length = = 0 ;
2022-02-13 14:50:07 +01:00
foreach ( var logClass in Enum . GetValues < LogClass > ( ) )
2019-12-21 20:52:31 +01:00
{
Logger . SetEnable ( logClass , noFilter ) ;
}
foreach ( var logClass in e . NewValue )
{
Logger . SetEnable ( logClass , true ) ;
}
}
private static void ReloadFileLogger ( object sender , ReactiveEventArgs < bool > e )
{
if ( e . NewValue )
{
2024-01-29 19:58:18 +01:00
FileStream logFile = FileLogTarget . PrepareLogFile ( AppDomain . CurrentDomain . BaseDirectory ) ;
if ( logFile = = null )
{
logFile = FileLogTarget . PrepareLogFile ( AppDataManager . BaseDirPath ) ;
if ( logFile = = null )
{
Logger . Error ? . Print ( LogClass . Application , "No writable log directory available. Make sure either the application directory or the Ryujinx directory is writable." ) ;
Logger . RemoveTarget ( "file" ) ;
return ;
}
}
2019-12-21 20:52:31 +01:00
Logger . AddTarget ( new AsyncLogTargetWrapper (
2024-01-29 19:58:18 +01:00
new FileLogTarget ( "file" , logFile ) ,
2019-12-21 20:52:31 +01:00
1000 ,
AsyncLogTargetOverflowAction . Block
) ) ;
}
else
{
Logger . RemoveTarget ( "file" ) ;
}
}
}
}