1+ #region Apache License
2+
3+ //
4+ // Licensed to the Apache Software Foundation (ASF) under one or more
5+ // contributor license agreements. See the NOTICE file distributed with
6+ // this work for additional information regarding copyright ownership.
7+ // The ASF licenses this file to you under the Apache License, Version 2.0
8+ // (the "License"); you may not use this file except in compliance with
9+ // the License. You may obtain a copy of the License at
10+ //
11+ // http://www.apache.org/licenses/LICENSE-2.0
12+ //
13+ // Unless required by applicable law or agreed to in writing, software
14+ // distributed under the License is distributed on an "AS IS" BASIS,
15+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+ // See the License for the specific language governing permissions and
17+ // limitations under the License.
18+ //
19+
20+ #endregion
21+
22+ using System . Xml ;
23+ using System ;
24+ using log4net . Appender ;
25+ using NUnit . Framework ;
26+ using log4net . Repository ;
27+ using log4net . Config ;
28+ using log4net . Util ;
29+
30+ namespace log4net . Tests . Appender ;
31+
32+ /// <summary>
33+ /// Used for internal unit testing the <see cref="FileAppender"/> class.
34+ /// </summary>
35+ [ TestFixture ]
36+ public sealed class FileAppenderTest
37+ {
38+ /// <summary>
39+ /// Shuts down any loggers in the hierarchy, along with all appenders
40+ /// </summary>
41+ private static void Reset ( )
42+ {
43+ // Regular users should not use the clear method lightly!
44+ LogManager . GetRepository ( ) . ResetConfiguration ( ) ;
45+ LogManager . GetRepository ( ) . Shutdown ( ) ;
46+ ( ( Repository . Hierarchy . Hierarchy ) LogManager . GetRepository ( ) ) . Clear ( ) ;
47+ }
48+
49+ /// <summary>
50+ /// Any initialization that happens before each test can
51+ /// go here
52+ /// </summary>
53+ [ SetUp ]
54+ public void SetUp ( ) => Reset ( ) ;
55+
56+ /// <summary>
57+ /// Any steps that happen after each test go here
58+ /// </summary>
59+ [ TearDown ]
60+ public void TearDown ( ) => Reset ( ) ;
61+
62+ /// <summary>
63+ /// Verifies that the <see cref="FileAppender.File"/> property accepts a <see cref="PatternString"/>
64+ /// </summary>
65+ [ Test ]
66+ public void FilenameWithPatternStringTest ( )
67+ {
68+ LogLog . LogReceived += LogReceived ;
69+ try
70+ {
71+ XmlDocument log4netConfig = new ( ) ;
72+ log4netConfig . LoadXml ( """
73+ <log4net>
74+ <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
75+ <layout type="log4net.Layout.PatternLayout">
76+ <conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception"/>
77+ </layout>
78+ </appender>
79+ <appender name="GeneralFileAppender" type="log4net.Appender.FileAppender">
80+ <file type="log4net.Util.PatternString" value="Logs\file_%property{LogName}_%date{yyyyMMddHHmmss}.Log"/>
81+ <appendToFile value="true"/>
82+ <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
83+ <layout type="log4net.Layout.PatternLayout">
84+ <conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception"/>
85+ </layout>
86+ </appender>
87+ <root>
88+ <level value="INFO"/>
89+ <appender-ref ref="GeneralFileAppender"/>
90+ </root>
91+ </log4net>
92+ """ ) ;
93+ ILoggerRepository rep = LogManager . CreateRepository ( Guid . NewGuid ( ) . ToString ( ) ) ;
94+ XmlConfigurator . Configure ( rep , log4netConfig [ "log4net" ] ! ) ;
95+ ILog log = LogManager . GetLogger ( rep . Name , "GeneralFileAppender" ) ;
96+ log . Info ( "Message" ) ;
97+ }
98+ finally
99+ {
100+ LogLog . LogReceived += LogReceived ;
101+ }
102+
103+ static void LogReceived ( object ? source , LogReceivedEventArgs e ) => Assert . Fail ( e . LogLog . Message ) ;
104+ }
105+ }
0 commit comments