aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs')
-rw-r--r--src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
new file mode 100644
index 00000000..06976433
--- /dev/null
+++ b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
@@ -0,0 +1,40 @@
+using Ryujinx.Common.Utilities;
+using System.IO;
+
+namespace Ryujinx.Common.Logging
+{
+ public class JsonLogTarget : ILogTarget
+ {
+ private Stream _stream;
+ private bool _leaveOpen;
+ private string _name;
+
+ string ILogTarget.Name { get => _name; }
+
+ public JsonLogTarget(Stream stream, string name)
+ {
+ _stream = stream;
+ _name = name;
+ }
+
+ public JsonLogTarget(Stream stream, bool leaveOpen)
+ {
+ _stream = stream;
+ _leaveOpen = leaveOpen;
+ }
+
+ public void Log(object sender, LogEventArgs e)
+ {
+ var logEventArgsJson = LogEventArgsJson.FromLogEventArgs(e);
+ JsonHelper.SerializeToStream(_stream, logEventArgsJson, LogEventJsonSerializerContext.Default.LogEventArgsJson);
+ }
+
+ public void Dispose()
+ {
+ if (!_leaveOpen)
+ {
+ _stream.Dispose();
+ }
+ }
+ }
+}