Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: er/extensions/ERXNSPrintWriterLogger.java


1   //
2   // ERXNSPrintWriterLogger.java
3   // Project ERExtensions
4   //
5   // Created by tatsuya on Wed Aug 21 2002
6   //
7   package er.extensions;
8   
9   import com.webobjects.foundation.*;
10  import java.io.PrintWriter;
11  import java.io.PrintStream;
12  import java.io.OutputStreamWriter;
13  import java.io.ByteArrayOutputStream;
14  
15  /**
16   * <code>ERXNSPrintWriterLogger</code> is an alternative of 
17   * {@link com.webobjects.foundation.NSLog.PrintStreamLogger NSLog.PrintStreamLogger} 
18   * but accepts character oriented {@link java.io.PrintWriter} instead of 
19   * byte oriented {@link java.io.PrintStream}
20   * so that the character encoding for logging can be 
21   * explicitly set. 
22   * <p>
23   * Usage: 
24   * <pre>
25   * // Create a PrintWriter with Japanese "SJIS" encoding. 
26   * OutputStreamWriter sjisOutWriter = new OutputStreamWriter(new FileOutputStream("app.log"), "SJIS");
27   * PrintWriter sjisPrintWriter = new PrintWriter(sjisOutWriter, true);
28   *
29   * // Create a logger then set it to NSLog.
30   * NSLog.Logger logger = new ERXNSPrintWriterLogger(sjisPrintWriter);
31   * NSLog.setDebug(logger);
32   * NSLog.setOut(logger);
33   * NSLog.setErr(logger);
34   * </pre>
35   */
36  public class ERXNSPrintWriterLogger extends NSLog.Logger {
37  
38      /** java.io.PrintWriter to print logs */ 
39      private PrintWriter _printWriter; 
40  
41      /** 
42       * Apple built-in logger, used internally to generate 
43       * a vervose header "[2002-08-31 09:01:00 EDT] <main> " 
44       */ 
45      private NSLog.PrintStreamLogger _vervoseStreamLogger; 
46      
47      /** an output from _vervoseStreamLogger */ 
48      private ByteArrayOutputStream _verboseHeaderStream;
49      
50      public ERXNSPrintWriterLogger() {
51          _printWriter = new PrintWriter(System.out);
52      }
53      
54      public ERXNSPrintWriterLogger(PrintWriter printWriter) {
55          _printWriter = printWriter;
56      }
57  
58      public ERXNSPrintWriterLogger(PrintStream printStream) {
59          _printWriter = new PrintWriter(printStream);
60      }
61  
62      public ERXNSPrintWriterLogger(String encodingName) throws java.io.UnsupportedEncodingException {
63          _printWriter = new PrintWriter(new OutputStreamWriter(System.out, encodingName));
64      }
65      
66      public void appendln() {
67          if (isEnabled())
68              _printWriter.println();
69      }
70      
71      public void appendln(Object object) {
72          if (isEnabled()) {
73              if (isVerbose()) 
74                  _printWriter.print(_verboseHeader());
75              _printWriter.println(object);
76          }
77      }
78      
79      public void flush() {
80          _printWriter.flush();
81      }
82  
83      private String _verboseHeader() {
84          _verboseHeaderStream().reset();  // clear the stream.
85  
86          // NSLog.PrintStreamLogger will set below to _verboseHeaderStream ByteArrayOutputStream:
87          // "[2002-08-31 09:01:00 EDT] <main> " + " " + "\n" 
88          _vervoseStreamLogger().appendln(" ");  
89          String verboseHeader = _verboseHeaderStream().toString();
90          
91          // remove " \n" at the end of line
92          int lastIndex = verboseHeader.lastIndexOf(" \n");
93          if (lastIndex > 0)   // ignores if " \n" is the first char (lastIndex == 0)
94              verboseHeader = verboseHeader.substring(0, lastIndex);
95          return verboseHeader;
96      }
97  
98      private ByteArrayOutputStream _verboseHeaderStream() {
99          if (_verboseHeaderStream == null) 
100             _verboseHeaderStream =  new ByteArrayOutputStream("[2002-08-31 09:01:00 EDT] <main> ".length() + 20);
101         return _verboseHeaderStream;
102     }
103 
104     private NSLog.PrintStreamLogger _vervoseStreamLogger() {
105         if (_vervoseStreamLogger == null) 
106             _vervoseStreamLogger = new NSLog.PrintStreamLogger(new PrintStream(_verboseHeaderStream()));
107         return _vervoseStreamLogger;
108     }
109 
110 }