diff --git a/Ryujinx.Common/Configuration/LoggerModule.cs b/Ryujinx.Common/Configuration/LoggerModule.cs
index 504a81418f..058bea5bd7 100644
--- a/Ryujinx.Common/Configuration/LoggerModule.cs
+++ b/Ryujinx.Common/Configuration/LoggerModule.cs
@@ -78,7 +78,7 @@ namespace Ryujinx.Configuration
             if (e.NewValue)
             {
                 Logger.AddTarget(new AsyncLogTargetWrapper(
-                    new FileLogTarget(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx.log"), "file"),
+                    new FileLogTarget(AppDomain.CurrentDomain.BaseDirectory, "file"),
                     1000,
                     AsyncLogTargetOverflowAction.Block
                 ));
diff --git a/Ryujinx.Common/Logging/Targets/FileLogTarget.cs b/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
index 4db5f7bce5..46fffd3acb 100644
--- a/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
+++ b/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
@@ -1,5 +1,6 @@
 using System;
 using System.IO;
+using System.Linq;
 using System.Text;
 
 namespace Ryujinx.Common.Logging
@@ -20,6 +21,20 @@ namespace Ryujinx.Common.Logging
 
         public FileLogTarget(string path, string name, FileShare fileShare, FileMode fileMode)
         {
+            // Ensure directory is present
+            DirectoryInfo logDir = new DirectoryInfo(Path.Combine(path, "Logs"));
+            logDir.Create();
+
+            // Clean up old logs, should only keep 3
+            FileInfo[] files = logDir.GetFiles("*.log").OrderBy((info => info.CreationTime)).ToArray();
+            for (int i = 0; i < files.Length - 2; i++)
+            {
+                files[i].Delete();
+            }
+
+            // Get path for the current time
+            path = Path.Combine(logDir.FullName, $"Ryujinx_{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.log");
+
             _name      = name;
             _logWriter = new StreamWriter(File.Open(path, fileMode, FileAccess.Write, fileShare));
             _formatter = new DefaultLogFormatter();