1
1
using System ;
2
2
using System . Runtime . CompilerServices ;
3
+ using System . Text ;
3
4
using Serilog . Core ;
4
5
5
6
namespace Microsoft . PowerShell . EditorServices . Utility
@@ -9,6 +10,11 @@ namespace Microsoft.PowerShell.EditorServices.Utility
9
10
/// </summary>
10
11
public class PsesLogger : ILogger
11
12
{
13
+ /// <summary>
14
+ /// The name of the ERROR log level.
15
+ /// </summary>
16
+ private static readonly string ErrorLevelName = LogLevel . Error . ToString ( ) . ToUpper ( ) ;
17
+
12
18
/// <summary>
13
19
/// The internal Serilog logger to log to.
14
20
/// </summary>
@@ -44,23 +50,23 @@ public void Write(
44
50
switch ( logLevel )
45
51
{
46
52
case LogLevel . Diagnostic :
47
- _logger . Verbose ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {IndentedLogMsg:l}\n " ,
53
+ _logger . Verbose ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:{IndentedLogMsg:l}" ,
48
54
logLevelName , callerSourceFile , callerName , callerLineNumber , indentedLogMsg ) ;
49
55
return ;
50
56
case LogLevel . Verbose :
51
- _logger . Debug ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {IndentedLogMsg:l}\n " ,
57
+ _logger . Debug ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:{IndentedLogMsg:l}" ,
52
58
logLevelName , callerSourceFile , callerName , callerLineNumber , indentedLogMsg ) ;
53
59
return ;
54
60
case LogLevel . Normal :
55
- _logger . Information ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {IndentedLogMsg:l}\n " ,
61
+ _logger . Information ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:{IndentedLogMsg:l}" ,
56
62
logLevelName , callerSourceFile , callerName , callerLineNumber , indentedLogMsg ) ;
57
63
return ;
58
64
case LogLevel . Warning :
59
- _logger . Warning ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {IndentedLogMsg:l}\n " ,
65
+ _logger . Warning ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:{IndentedLogMsg:l}" ,
60
66
logLevelName , callerSourceFile , callerName , callerLineNumber , indentedLogMsg ) ;
61
67
return ;
62
68
case LogLevel . Error :
63
- _logger . Error ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {IndentedLogMsg:l}\n " ,
69
+ _logger . Error ( "[{LogLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:{IndentedLogMsg:l}" ,
64
70
logLevelName , callerSourceFile , callerName , callerLineNumber , indentedLogMsg ) ;
65
71
return ;
66
72
}
@@ -81,8 +87,10 @@ public void WriteException(
81
87
[ CallerFilePath ] string callerSourceFile = null ,
82
88
[ CallerLineNumber ] int callerLineNumber = 0 )
83
89
{
84
- _logger . Error ( "[{Error:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}:\n {ErrorMessage:l}\n {Exception:l}\n " ,
85
- LogLevel . Error . ToString ( ) . ToUpper ( ) , callerSourceFile , callerName , callerLineNumber , errorMessage , exception ) ;
90
+ string indentedException = IndentMsg ( exception . ToString ( ) ) ;
91
+
92
+ _logger . Error ( "[{ErrorLevelName:l}] {CallerSourceFile:l}: In method '{CallerName:l}', line {CallerLineNumber}: {ErrorMessage:l}{IndentedException:l}" ,
93
+ ErrorLevelName , callerSourceFile , callerName , callerLineNumber , errorMessage , indentedException ) ;
86
94
}
87
95
88
96
/// <summary>
@@ -92,33 +100,35 @@ public void WriteException(
92
100
/// <returns>The indented log message string.</returns>
93
101
private static string IndentMsg ( string logMessage )
94
102
{
95
- string [ ] msgLines = logMessage . Split ( '\n ' ) ;
96
-
97
- for ( int i = 0 ; i < msgLines . Length ; i ++ )
98
- {
99
- msgLines [ i ] = msgLines [ i ] . Insert ( 0 , " " ) ;
100
- }
101
-
102
- return String . Join ( "\n " , msgLines ) + "\n " ;
103
+ return new StringBuilder ( logMessage )
104
+ . Replace ( Environment . NewLine , s_indentedPrefix )
105
+ . Insert ( 0 , s_indentedPrefix )
106
+ . AppendLine ( )
107
+ . ToString ( ) ;
103
108
}
104
109
110
+ /// <summary>
111
+ /// A newline followed by a single indentation prefix.
112
+ /// </summary>
113
+ private static readonly string s_indentedPrefix = Environment . NewLine + " " ;
114
+
105
115
#region IDisposable Support
106
- private bool disposedValue = false ; // To detect redundant calls
116
+ private bool _disposedValue = false ; // To detect redundant calls
107
117
108
118
/// <summary>
109
119
/// Internal disposer.
110
120
/// </summary>
111
121
/// <param name="disposing">Whether or not the object is being disposed.</param>
112
122
protected virtual void Dispose ( bool disposing )
113
123
{
114
- if ( ! disposedValue )
124
+ if ( ! _disposedValue )
115
125
{
116
126
if ( disposing )
117
127
{
118
128
_logger . Dispose ( ) ;
119
129
}
120
130
121
- disposedValue = true ;
131
+ _disposedValue = true ;
122
132
}
123
133
}
124
134
0 commit comments