-
Notifications
You must be signed in to change notification settings - Fork 66
/
ServerLogWriter.cs
99 lines (85 loc) 路 2.08 KB
/
ServerLogWriter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
锘縰sing System;
using System.Diagnostics;
using System.IO;
namespace TerrariaApi.Server
{
public class ServerLogWriter : ILogWriter, IDisposable
{
protected StreamWriter LogFileWriter { get; private set; }
public string Name
{
get { return "Server Log Writer"; }
}
public ServerLogWriter(string logFilePath = "ServerLog.txt") {
try
{
this.LogFileWriter = new StreamWriter(logFilePath, true);
}
catch (Exception ex)
{
try {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Fatal startup exception. Could not write to \"{0}\". Exception details:\n{1}", logFilePath, ex);
} finally {
Console.ForegroundColor = ConsoleColor.Gray;
}
throw;
}
this.LogFileWriter.AutoFlush = true;
}
public void Detach()
{
}
public void ServerWriteLine(string message, TraceLevel kind)
{
this.WriteLine("Server API", message, kind);
}
public void PluginWriteLine(TerrariaPlugin plugin, string message, TraceLevel kind)
{
this.WriteLine(plugin.Name, message, kind);
}
protected virtual void WriteLine(string context, string message, TraceLevel kind)
{
if (kind == TraceLevel.Off)
return;
if (kind != TraceLevel.Verbose)
{
try {
switch (kind)
{
case TraceLevel.Error:
Console.ForegroundColor = ConsoleColor.Red;
break;
case TraceLevel.Warning:
Console.ForegroundColor = ConsoleColor.Yellow;
break;
case TraceLevel.Info:
Console.ForegroundColor = ConsoleColor.Gray;
break;
}
Console.WriteLine("[{0}] {1} {2}", context, kind, message);
} finally {
Console.ForegroundColor = ConsoleColor.Gray;
}
}
this.LogFileWriter.WriteLine("[{0:MM/dd/yy HH:mm:ss}] [{1}] {2}: {3}", DateTime.Now, context, kind, message);
}
~ServerLogWriter()
{
this.Dispose(false);
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this.LogFileWriter != null)
this.LogFileWriter.Dispose();
}
}
}
}