View Javadoc
1   /*
2    * Copyright (c) 2012-2023, jcabi.com
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met: 1) Redistributions of source code must retain the above
8    * copyright notice, this list of conditions and the following
9    * disclaimer. 2) Redistributions in binary form must reproduce the above
10   * copyright notice, this list of conditions and the following
11   * disclaimer in the documentation and/or other materials provided
12   * with the distribution. 3) Neither the name of the jcabi.com nor
13   * the names of its contributors may be used to endorse or promote
14   * products derived from this software without specific prior written
15   * permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21   * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28   * OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  package com.jcabi.log;
31  
32  import java.io.StringWriter;
33  import java.util.concurrent.TimeUnit;
34  import org.apache.log4j.Appender;
35  import org.apache.log4j.Level;
36  import org.apache.log4j.LogManager;
37  import org.apache.log4j.PatternLayout;
38  import org.apache.log4j.WriterAppender;
39  import org.hamcrest.MatcherAssert;
40  import org.hamcrest.Matchers;
41  import org.junit.jupiter.api.Test;
42  
43  /**
44   * Test case for %L pattern.
45   * If you change this class, you have to care about line number
46   * in "com.jcabi.log.LineNumberTest:72"
47   * @since 1.18
48   */
49  final class LineNumberTest {
50  
51      /**
52       * Conversation pattern for test case.
53       */
54      private static final String CONV_PATTERN = "%c:%L";
55  
56      @Test
57      void testLineNumber() throws Exception {
58          final PatternLayout layout = new PatternLayout();
59          layout.setConversionPattern(LineNumberTest.CONV_PATTERN);
60          final org.apache.log4j.Logger root = LogManager.getRootLogger();
61          final Level level = root.getLevel();
62          root.setLevel(Level.INFO);
63          final StringWriter writer = new StringWriter();
64          final Appender appender = new WriterAppender(layout, writer);
65          root.addAppender(appender);
66          try {
67              Logger.info(this, "Test");
68              TimeUnit.MILLISECONDS.sleep(1L);
69              MatcherAssert.assertThat(
70                  writer.toString(),
71                  Matchers.containsString(
72                      "com.jcabi.log.LineNumberTest:241"
73                  )
74              );
75          } finally {
76              root.removeAppender(appender);
77              root.setLevel(level);
78          }
79      }
80  }