1   /*
2    * %W% %E%
3    *
4    * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
5    * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6    */
7   
8   
9   package java.util.logging;
10  
11  /**
12   * ErrorManager objects can be attached to Handlers to process
13   * any error that occur on a Handler during Logging.
14   * <p>
15   * When processing logging output, if a Handler encounters problems
16   * then rather than throwing an Exception back to the issuer of
17   * the logging call (who is unlikely to be interested) the Handler
18   * should call its associated ErrorManager.
19   */
20  
21  public class ErrorManager {
22     private boolean reported = false;
23  
24      /*
25       * We declare standard error codes for important categories of errors.
26       */
27  
28      /**
29       * GENERIC_FAILURE is used for failure that don't fit
30       * into one of the other categories.
31       */    
32      public final static int GENERIC_FAILURE = 0;
33      /**
34       * WRITE_FAILURE is used when a write to an output stream fails.
35       */    
36      public final static int WRITE_FAILURE = 1;
37      /**
38       * FLUSH_FAILURE is used when a flush to an output stream fails.
39       */    
40      public final static int FLUSH_FAILURE = 2;
41      /**
42       * CLOSE_FAILURE is used when a close of an output stream fails.
43       */    
44      public final static int CLOSE_FAILURE = 3;
45      /**
46       * OPEN_FAILURE is used when an open of an output stream fails.
47       */    
48      public final static int OPEN_FAILURE = 4;
49      /**
50       * FORMAT_FAILURE is used when formatting fails for any reason.
51       */    
52      public final static int FORMAT_FAILURE = 5;
53  
54      /**
55       * The error method is called when a Handler failure occurs.
56       * <p>
57       * This method may be overriden in subclasses.  The default
58       * behavior in this base class is that the first call is
59       * reported to System.err, and subsequent calls are ignored.
60       *
61       * @param msg    a descriptive string (may be null)
62       * @param ex     an exception (may be null)
63       * @param code   an error code defined in ErrorManager
64       */
65      public synchronized void error(String msg, Exception ex, int code) {
66      if (reported) {
67          // We only report the first error, to avoid clogging
68          // the screen.
69          return;
70      }   
71      reported = true;
72      String text = "java.util.logging.ErrorManager: " + code;
73      if (msg != null) {
74          text = text + ": " + msg;
75      }
76      System.err.println(text);
77      if (ex != null) {
78          ex.printStackTrace();
79      }
80      }
81  }
82