1
+ #region Apache License
2
+ //
3
+ // Licensed to the Apache Software Foundation (ASF) under one or more
4
+ // contributor license agreements. See the NOTICE file distributed with
5
+ // this work for additional information regarding copyright ownership.
6
+ // The ASF licenses this file to you under the Apache License, Version 2.0
7
+ // (the "License"); you may not use this file except in compliance with
8
+ // the License. You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing, software
13
+ // distributed under the License is distributed on an "AS IS" BASIS,
14
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ // See the License for the specific language governing permissions and
16
+ // limitations under the License.
17
+ //
18
+ #endregion
19
+
20
+ using System ;
21
+ using System . Collections . Generic ;
22
+ using System . Threading ;
23
+ using System . Xml ;
24
+ using log4net . Appender ;
25
+ using log4net . Config ;
26
+ using log4net . Core ;
27
+ using log4net . Repository ;
28
+ using log4net . Tests . Appender . Internal ;
29
+ using NUnit . Framework ;
30
+
31
+ namespace log4net . Tests . Appender ;
32
+
33
+ /// <summary>
34
+ /// Tests for <see cref="TelnetAppender"/>
35
+ /// </summary>
36
+ [ TestFixture ]
37
+ public sealed class TelnetAppenderTest
38
+ {
39
+ /// <summary>
40
+ /// Simple Test für the <see cref="TelnetAppender"/>
41
+ /// </summary>
42
+ /// <remarks>
43
+ /// https://github.com/apache/logging-log4net/issues/194
44
+ /// https://stackoverflow.com/questions/79053363/log4net-telnetappender-doesnt-work-after-migrate-to-log4net-3
45
+ /// </remarks>
46
+ [ Test ]
47
+ public void TelnetTest ( )
48
+ {
49
+ List < string > received = [ ] ;
50
+
51
+ XmlDocument log4netConfig = new ( ) ;
52
+ int port = 9090 ;
53
+ log4netConfig . LoadXml ( $ """
54
+ <log4net>
55
+ <appender name="TelnetAppender" type="log4net.Appender.TelnetAppender">
56
+ <port value="{ port } " />
57
+ <layout type="log4net.Layout.PatternLayout">
58
+ <conversionPattern value="%date %-5level - %message%newline" />
59
+ </layout>
60
+ </appender>
61
+ <root>
62
+ <level value="INFO"/>
63
+ <appender-ref ref="TelnetAppender"/>
64
+ </root>
65
+ </log4net>
66
+ """ ) ;
67
+ string logId = Guid . NewGuid ( ) . ToString ( ) ;
68
+ ILoggerRepository repository = LogManager . CreateRepository ( logId ) ;
69
+ XmlConfigurator . Configure ( repository , log4netConfig [ "log4net" ] ! ) ;
70
+ using ( SimpleTelnetClient telnetClient = new ( Received , port ) )
71
+ {
72
+ telnetClient . Run ( ) ;
73
+ WaitForReceived ( 1 ) ; // wait for welcome message
74
+ ILogger logger = repository . GetLogger ( "Telnet" ) ;
75
+ logger . Log ( typeof ( TelnetAppenderTest ) , Level . Info , logId , null ) ;
76
+ WaitForReceived ( 2 ) ; // wait for log message
77
+ }
78
+ repository . Shutdown ( ) ;
79
+ Assert . AreEqual ( 2 , received . Count ) ;
80
+ StringAssert . Contains ( logId , received [ 1 ] ) ;
81
+
82
+ void Received ( string message ) => received . Add ( message ) ;
83
+
84
+ void WaitForReceived ( int count )
85
+ {
86
+ while ( received . Count < count )
87
+ {
88
+ Thread . Sleep ( 10 ) ;
89
+ }
90
+ }
91
+ }
92
+ }
0 commit comments