Skip to content

Commit 303bc1c

Browse files
committed
Improve tracing control and cleanup in GeneralTracer
Added an _isTracingEnabled flag to allow enabling/disabling tracing and exposed IsTracingEnabled() for status checks. Removed unnecessary locking in file listener initialization and WriteTraceMessage, streamlining log file rotation and message writing. Cleaned up comments in WindowsOutputDebugListener for clarity.
1 parent 7fd03a2 commit 303bc1c

File tree

2 files changed

+32
-28
lines changed

2 files changed

+32
-28
lines changed

src/c#/GeneralUpdate.Common/Internal/Trace/GeneralTracer.cs

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ namespace GeneralUpdate.Common.Internal;
77

88
public static class GeneralTracer
99
{
10-
private static readonly object _lockObj = new object();
10+
private static readonly object _lockObj = new();
11+
private static bool _isTracingEnabled;
1112
private static string _currentLogDate;
1213
private static TextWriterTraceListener _fileListener;
1314

@@ -28,34 +29,32 @@ static GeneralTracer()
2829
Trace.Listeners.Add(new DefaultTraceListener());
2930

3031
Trace.AutoFlush = true;
32+
_isTracingEnabled = true;
3133
}
3234

3335
private static void InitializeFileListener()
3436
{
3537
//Ensure that log files are rotated on a daily basis
36-
lock (_lockObj)
37-
{
38-
var today = DateTime.Now.ToString("yyyy-MM-dd");
39-
if (today == _currentLogDate && _fileListener != null)
40-
return;
38+
var today = DateTime.Now.ToString("yyyy-MM-dd");
39+
if (today == _currentLogDate && _fileListener != null)
40+
return;
4141

42-
if (_fileListener != null)
43-
{
44-
Trace.Listeners.Remove(_fileListener);
45-
_fileListener.Flush();
46-
_fileListener.Close();
47-
_fileListener.Dispose();
48-
}
42+
if (_fileListener != null)
43+
{
44+
Trace.Listeners.Remove(_fileListener);
45+
_fileListener.Flush();
46+
_fileListener.Close();
47+
_fileListener.Dispose();
48+
}
4949

50-
var logDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs");
51-
Directory.CreateDirectory(logDir);
50+
var logDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs");
51+
Directory.CreateDirectory(logDir);
5252

53-
var logFileName = Path.Combine(logDir, $"generalupdate-trace {today}.log");
54-
_fileListener = new TextWriterTraceListener(logFileName) { Name = "FileListener" };
53+
var logFileName = Path.Combine(logDir, $"generalupdate-trace {today}.log");
54+
_fileListener = new TextWriterTraceListener(logFileName) { Name = "FileListener" };
5555

56-
Trace.Listeners.Add(_fileListener);
57-
_currentLogDate = today;
58-
}
56+
Trace.Listeners.Add(_fileListener);
57+
_currentLogDate = today;
5958
}
6059

6160
public static void Debug(string message) => WriteTraceMessage(TraceLevel.Verbose, message);
@@ -85,15 +84,27 @@ public static void SetTracingEnabled(bool enabled)
8584
lock (_lockObj)
8685
{
8786
Trace.AutoFlush = enabled;
87+
_isTracingEnabled = enabled;
8888
foreach (TraceListener listener in Trace.Listeners)
8989
{
9090
listener.Filter = enabled ? null : new EventTypeFilter(SourceLevels.Off);
9191
}
9292
}
9393
}
9494

95+
public static bool IsTracingEnabled()
96+
{
97+
lock (_lockObj)
98+
{
99+
return _isTracingEnabled;
100+
}
101+
}
102+
95103
private static void WriteTraceMessage(TraceLevel level, string message)
96104
{
105+
if(!IsTracingEnabled())
106+
return;
107+
97108
InitializeFileListener();
98109
var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
99110
var levelName = GetLevelName(level);
@@ -114,10 +125,7 @@ private static void WriteTraceMessage(TraceLevel level, string message)
114125
fullMessage = $"[{timestamp}] [{levelName}] : {message}";
115126
}
116127

117-
lock (_lockObj)
118-
{
119-
Trace.WriteLine(fullMessage);
120-
}
128+
Trace.WriteLine(fullMessage);
121129
}
122130

123131
private static string GetLevelName(TraceLevel level) => level switch

src/c#/GeneralUpdate.Common/Internal/Trace/WindowsOutputDebugListener.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ namespace GeneralUpdate.Common.Internal;
66

77
public class WindowsOutputDebugListener : TraceListener
88
{
9-
// 声明Win32 API的OutputDebugString函数
109
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
1110
private static extern void OutputDebugString(string lpOutputString);
1211

13-
// 重写Write方法(处理无换行的输出)
1412
public override void Write(string message)
1513
{
1614
if (!string.IsNullOrEmpty(message))
@@ -19,10 +17,8 @@ public override void Write(string message)
1917
}
2018
}
2119

22-
// 重写WriteLine方法(处理带换行的输出)
2320
public override void WriteLine(string message)
2421
{
25-
// 附加换行符,保持与Trace.WriteLine一致的行为
2622
Write($"{message}{Environment.NewLine}");
2723
}
2824
}

0 commit comments

Comments
 (0)