1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.reload4j.testHarness;
26
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Random;
30
31 import org.apache.log4j.AppenderSkeleton;
32 import org.apache.log4j.spi.LoggingEvent;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 public class RecursiveAppender extends AppenderSkeleton {
37
38 int diff = new Random().nextInt();
39 int activationDelay = 0;
40 String loggerName = "org.slf4j.impl.RecursiveAppender" + diff;
41
42 public List<LoggingEvent> events = new ArrayList<>();
43
44 public RecursiveAppender() {
45 System.out.println("XXXXXXX entering RecursiveAppender constructor");
46 Logger logger = LoggerFactory.getLogger(loggerName);
47 logger.info("Calling a logger in the constructor");
48 System.out.println("exiting RecursiveAppender constructor");
49 }
50
51 protected void append(LoggingEvent e) {
52 events.add(e);
53 }
54
55 public void close() {
56 }
57
58 public boolean requiresLayout() {
59 return false;
60 }
61
62 @Override
63 public void activateOptions() {
64 System.out.println("entering RecursiveAppender.activateOptions");
65 if (activationDelay > 0) {
66 Logger logger = LoggerFactory.getLogger(loggerName);
67 logger.info("About to wait {} millis", activationDelay);
68 try {
69 Thread.sleep(activationDelay);
70 } catch (InterruptedException e) {
71 e.printStackTrace();
72 }
73 logger.info("Done waiting {} millis", activationDelay);
74 }
75 super.activateOptions();
76
77 System.out.println("exiting RecursiveAppender.activateOptions");
78 }
79
80 public int getActivationDelay() {
81 return activationDelay;
82 }
83
84 public void setActivationDelay(int activationDelay) {
85 this.activationDelay = activationDelay;
86 }
87
88 }