1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.core.rolling;
11
12 import java.io.File;
13 import java.io.IOException;
14
15 import ch.qos.logback.core.FileAppender;
16 import ch.qos.logback.core.rolling.helper.CompressionMode;
17
18
19
20
21
22
23
24
25
26
27
28
29 public class RollingFileAppender<E> extends FileAppender<E> {
30 File activeFileCache;
31 TriggeringPolicy<E> triggeringPolicy;
32 RollingPolicy rollingPolicy;
33
34
35
36
37
38 public RollingFileAppender() {
39 }
40
41 public void start() {
42 if (triggeringPolicy == null) {
43 addWarn("No TriggeringPolicy was set for the RollingFileAppender named "
44 + getName());
45 addWarn("For more information, please visit http://logback.qos.ch/codes.html#rfa_no_tp");
46 return;
47 }
48
49 if (rollingPolicy == null) {
50 addError("No RollingPolicy was set for the RollingFileAppender named "
51 + getName());
52 addError("For more information, please visit http://logback.qos.ch/codes.html#rfa_no_rp");
53 return;
54 }
55
56 if(isPrudent()) {
57 if(rawFileProperty() != null) {
58 addWarn("Setting \"File\" property to null on account of prudent mode");
59 setFile(null);
60 }
61 if(rollingPolicy.getCompressionMode() != CompressionMode.NONE) {
62 addError("Compression is not supported in prudent mode. Aborting");
63 return;
64 }
65 }
66
67 activeFileCache = new File(getFile());
68 addInfo("Active log file name: " + getFile());
69 super.start();
70 }
71
72 @Override
73 public String getFile() {
74 return rollingPolicy.getActiveFileName();
75 }
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 public void rollover() {
91
92
93
94
95
96
97 this.closeWriter();
98
99
100
101
102
103
104 try {
105 rollingPolicy.rollover();
106 } catch (RolloverFailure rf) {
107 addWarn("RolloverFailure occurred. Deferring roll-over.");
108
109 this.append = true;
110 }
111
112 try {
113
114
115 this.openFile(rollingPolicy.getActiveFileName());
116 } catch (IOException e) {
117 addError("setFile(" + fileName + ", false) call failed.", e);
118 }
119 }
120
121
122
123
124 protected void subAppend(E event) {
125
126
127 if (triggeringPolicy.isTriggeringEvent(activeFileCache, event)) {
128 rollover();
129 }
130
131 super.subAppend(event);
132 }
133
134 public RollingPolicy getRollingPolicy() {
135 return rollingPolicy;
136 }
137
138 public TriggeringPolicy getTriggeringPolicy() {
139 return triggeringPolicy;
140 }
141
142
143
144
145
146
147
148
149 @SuppressWarnings("unchecked")
150 public void setRollingPolicy(RollingPolicy policy) {
151 rollingPolicy = policy;
152 if (rollingPolicy instanceof TriggeringPolicy) {
153 triggeringPolicy = (TriggeringPolicy<E>) policy;
154 }
155
156 }
157
158 public void setTriggeringPolicy(TriggeringPolicy<E> policy) {
159 triggeringPolicy = policy;
160 if (policy instanceof RollingPolicy) {
161 rollingPolicy = (RollingPolicy) policy;
162 }
163 }
164 }