3939 */
4040class LockedFile
4141{
42+ private static final Logger LOGGER = LoggerFactory .getLogger (LockedFile .class );
4243
43- private static final Logger logger = LoggerFactory .getLogger (LockedFile .class );
44+ // Wrapper just to allow test(s) to disable/re-route
45+ static LoggerWrapper logger = new LoggerWrapper (LOGGER );
4446
4547 /**
4648 * Expected file length comes from hex-timestamp (16 digits),
@@ -115,6 +117,11 @@ class LockedFile
115117 mLock = lock ;
116118 }
117119
120+ // @since 5.2 for testing (for `LockedFileTest`)
121+ static void logging (boolean enabled ) {
122+ logger = new LoggerWrapper (enabled ? LOGGER : null );
123+ }
124+
118125 public void deactivate ()
119126 {
120127 RandomAccessFile raf = mRAFile ;
@@ -131,7 +138,7 @@ public long readStamp()
131138 try {
132139 size = (int ) mChannel .size ();
133140 } catch (IOException ioe ) {
134- logger .error ("Failed to read file size" , ioe );
141+ logger .error (ioe , "Failed to read file size" );
135142 return READ_ERROR ;
136143 }
137144
@@ -151,7 +158,7 @@ public long readStamp()
151158 try {
152159 mRAFile .readFully (data );
153160 } catch (IOException ie ) {
154- logger .error ("(file '{} ') Failed to read {} bytes" , mFile , size , ie );
161+ logger .error (ie , "(file '" + mFile + " ') Failed to read " + size + " bytes" );
155162 return READ_ERROR ;
156163 }
157164
@@ -168,25 +175,25 @@ public long readStamp()
168175 dataStr = dataStr .trim ();
169176
170177 long result = -1 ;
171- String err = null ;
178+ String errMsg = null ;
172179
173180 if (!dataStr .startsWith ("[0" )
174181 || dataStr .length () < 3
175182 || Character .toLowerCase (dataStr .charAt (2 )) != 'x' ) {
176- err = "does not start with '[0x' prefix" ;
183+ errMsg = "does not start with '[0x' prefix" ;
177184 } else {
178185 int ix = dataStr .indexOf (']' , 3 );
179186 if (ix <= 0 ) {
180- err = "does not end with ']' marker" ;
187+ errMsg = "does not end with ']' marker" ;
181188 } else {
182189 String hex = dataStr .substring (3 , ix );
183190 if (hex .length () > 16 ) {
184- err = "length of the (hex) timestamp too long; expected 16, had " +hex .length ()+" ('" +hex +"')" ;
191+ errMsg = "length of the (hex) timestamp too long; expected 16, had " +hex .length ()+" ('" +hex +"')" ;
185192 } else {
186193 try {
187194 result = Long .parseLong (hex , 16 );
188195 } catch (NumberFormatException nex ) {
189- err = "does not contain a valid hex timestamp; got '"
196+ errMsg = "does not contain a valid hex timestamp; got '"
190197 +hex +"' (parse error: " +nex +")" ;
191198 }
192199 }
@@ -195,7 +202,7 @@ public long readStamp()
195202
196203 // Unsuccesful?
197204 if (result < 0L ) {
198- logger .error ("(file '{}') Malformed timestamp file contents: {}" , mFile , err );
205+ logger .error ("(file '{}') Malformed timestamp file contents: {}" , mFile , errMsg );
199206 return READ_ERROR ;
200207 }
201208
@@ -210,12 +217,11 @@ public void writeStamp(long stamp)
210217 {
211218 // Let's do sanity check first:
212219 if (stamp <= mLastTimestamp ) {
213- /* same stamp is not dangerous, but pointless... so warning,
214- * not an error:
215- */
220+ // same stamp is not dangerous, but pointless... so warning,
221+ // not an error:
216222 if (stamp == mLastTimestamp ) {
217223 logger .warn ("(file '{}') Trying to re-write existing timestamp ({})" , mFile , stamp );
218- return ;
224+ return ;
219225 }
220226 throw new IOException ("" +mFile +" trying to overwrite existing value (" +mLastTimestamp +") with an earlier timestamp (" +stamp +")" );
221227 }
@@ -260,20 +266,58 @@ public void writeStamp(long stamp)
260266 */
261267
262268 protected static void doDeactivate (File f , RandomAccessFile raf ,
263- FileLock lock )
269+ FileLock lock )
264270 {
265271 if (lock != null ) {
266272 try {
267273 lock .release ();
268274 } catch (Throwable t ) {
269- logger .error ("Failed to release lock (for file '{} ')" , f , t );
275+ logger .error (t , "Failed to release lock (for file '" + f + " ')" );
270276 }
271277 }
272278 if (raf != null ) {
273279 try {
274280 raf .close ();
275281 } catch (Throwable t ) {
276- logger .error ("Failed to close file '{}'" , f , t );
282+ logger .error (t , "Failed to close file '{" +f +"}'" );
283+ }
284+ }
285+ }
286+
287+ /*
288+ //////////////////////////////////////////////////////////////
289+ // Helper class(es)
290+ //////////////////////////////////////////////////////////////
291+ */
292+
293+ private static class LoggerWrapper {
294+ private final Logger logger ;
295+
296+ public LoggerWrapper (Logger l ) {
297+ logger = l ;
298+ }
299+
300+ public void error (Throwable t , String msg ) {
301+ if (logger != null ) {
302+ logger .error (msg , t );
303+ }
304+ }
305+
306+ public void error (String msg , Object arg1 , Object arg2 ) {
307+ if (logger != null ) {
308+ logger .error (msg , arg1 , arg2 );
309+ }
310+ }
311+
312+ public void warn (String msg ) {
313+ if (logger != null ) {
314+ logger .warn (msg );
315+ }
316+ }
317+
318+ public void warn (String msg , Object arg1 , Object arg2 ) {
319+ if (logger != null ) {
320+ logger .warn (msg , arg1 , arg2 );
277321 }
278322 }
279323 }
0 commit comments