1
2
3
4
5
6
7
8
9
10
11 package psiprobe.tools.logging.log4j2;
12
13 import java.io.File;
14 import java.nio.file.Path;
15
16 import psiprobe.tools.logging.AbstractLogDestination;
17
18
19
20
21 public class Log4J2AppenderAccessor extends AbstractLogDestination {
22
23
24 private Log4J2LoggerConfigAccessor loggerAccessor;
25
26
27
28
29
30
31 public Log4J2LoggerConfigAccessor getLoggerAccessor() {
32 return loggerAccessor;
33 }
34
35
36
37
38
39
40 public void setLoggerAccessor(Log4J2LoggerConfigAccessor loggerAccessor) {
41 this.loggerAccessor = loggerAccessor;
42 }
43
44 @Override
45 public boolean isContext() {
46 return getLoggerAccessor().isContext();
47 }
48
49 @Override
50 public boolean isRoot() {
51 return getLoggerAccessor().isRoot();
52 }
53
54 @Override
55 public String getName() {
56 return getLoggerAccessor().getName();
57 }
58
59 @Override
60 public String getLogType() {
61 return "log4j2";
62 }
63
64 @Override
65 public String getIndex() {
66 return (String) invokeMethod(getTarget(), "getName", null, null);
67 }
68
69 @Override
70 public String getConversionPattern() {
71 Object layout = invokeMethod(getTarget(), "getLayout", null, null);
72 if (layout != null && "org.apache.logging.log4j.core.layout.PatternLayout"
73 .equals(layout.getClass().getName())) {
74 return (String) invokeMethod(layout, "getConversionPattern", null, null);
75 }
76 return null;
77 }
78
79 @Override
80 public File getFile() {
81 String fileName = (String) getProperty(getTarget(), "fileName", null);
82 if (fileName != null) {
83 return Path.of(fileName).toFile();
84 }
85
86 File result = null;
87 if ("org.apache.logging.log4j.core.appender.SmtpAppender"
88 .equals(getTarget().getClass().getName())) {
89 Object smtpManager = getProperty(getTarget(), "manager", null, true);
90 Object factoryData = getProperty(smtpManager, "data", null, true);
91 Object cc = getProperty(factoryData, "cc", null, true);
92 Object bcc = getProperty(factoryData, "bcc", null, true);
93 Object from = getProperty(factoryData, "from", null, true);
94 Object subjectSerializer = getProperty(factoryData, "subject", null, true);
95 String subject = null;
96 if (subjectSerializer != null) {
97 Object[] subjectFormatters =
98 (Object[]) getProperty(subjectSerializer, "formatters", null, true);
99 if (subjectFormatters != null) {
100 Object subjectFormatterConverter =
101 getProperty(subjectFormatters[0], "converter", null, true);
102 if (subjectFormatterConverter != null) {
103 subject = (String) getProperty(subjectFormatterConverter, "literal", null, true);
104 }
105 }
106 }
107 result = Path
108 .of("mailto:" + getProperty(factoryData, "to", "", true)
109 + (from != null ? "&from=" + from : "") + (cc != null ? "&cc=" + cc : "")
110 + (bcc != null ? "&bcc=" + bcc : "") + (subject != null ? "&subject=" + subject : ""))
111 .toFile();
112 } else {
113 result = getStdoutFile();
114 }
115 return result;
116 }
117
118 @Override
119 public String getLevel() {
120 return getLoggerAccessor().getLevel();
121 }
122
123 @Override
124 public String[] getValidLevels() {
125 return new String[] {"OFF", "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE", "ALL"};
126 }
127
128 }