2012-03-13 4 views
0

エラーメッセージをログファイルに書き込むことができるOSGIバンドルを実装したいと思います。私は解決できないコードにいくつかのエラーがあります。私はNetbeansが私にエラーを与えるコードコードをコメントしました。Javaエラーのログコードの実装

パブリッククラスLoggingSystemImplは、NetBeansでLoggingSystem {

private final static Calendar calendar = Calendar.getInstance(); 
    private final static String user = System.getenv("USERNAME").toLowerCase(); 
    private final static String sMonth = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH); 
    private final static int y = calendar.get(Calendar.YEAR); 

    // the name of the log file 
    //private final String logName = sysDrive + "\\fttb_web - " + sMonth.toLowerCase() + ", " + y + ".log"; 
    private final String logName = "logger - " + sMonth.toLowerCase() + ", " + y + ".log"; 

    private static boolean closed; 
    private static Log log = null; 
    private static BufferedWriter bw = null; 
    private static FileOutputStream fos = null; 
    private static OutputStreamWriter osw = null; 

    public LoggingSystemImpl() { 
    } 


    public String LoggingSystemUtilization() throws FileNotFoundException{ 


     return "ok"; 
    } 


    private String Log() throws IOException 
{ 
    fos = new FileOutputStream(logName, true); 

    // set encoding to cyrillic (if available) 
    if (Charset.isSupported("windows-1251")) 
    { 
     osw = new OutputStreamWriter(fos, Charset.forName("windows-1251")); 
    } 
    else { osw = new OutputStreamWriter(fos); } 

    bw = new BufferedWriter(osw, 2048); // 2Mb buffer 

    return"ok"; 

} 

// intro header for log session 
public static synchronized Log getInstance() throws IOException 
{ 
    boolean exc = false; 
    try 
    { 
     if (log == null || closed) 
     { 
      log = new Log() {}; 

エラーメッセージ実装:sun.rmi.runtime.Log

に抽象的ではなく、抽象メソッドgetPrintStreamを(上書きしない)を
  closed = false; 
      log.writeln("logged in."); 

エラーメッセージ:シンボルを見つけることができません シンボル:メソッドwriteln(java.lang.String) 場所:sun.rmi.runtime.Logの変数ログ

log.nl(); 

エラーメッセージ:あなたが独自に作成する必要がある理由いくつかの理由がありますない限りタイプsun.rmi.runtime.Log

  } 
     } 
     catch(IOException x) { exc = true; throw x; } 
     catch(Exception x) { exc = true; x.printStackTrace(); } 
     finally 
     { 
      if (exc) 
      { 
       try 
       { 
        if (fos != null) { fos.close(); fos = null; } 
        if (osw != null) { osw.close(); fos = null; } 
        if (bw != null) { bw.close(); bw = null; } 
       } 
       catch(Exception x) { x.printStackTrace(); } 
      } 
     } 
     return log; 
    } 


    public synchronized void nl() 
    { 
     try { bw.newLine(); } 
     catch(IOException x) {x.printStackTrace();} 
    } 

    public synchronized void nl(int count) 
    { 
     try 
     { 
      for (int i = 0; i < count; i++) bw.newLine(); 
     } 
     catch(IOException x) {x.printStackTrace();} 
    } 
    public synchronized void writeln(String s) 
    { 
     try { bw.write(getTime() + ": " + s); bw.newLine(); } 
     catch(IOException x) {x.printStackTrace();} 
    } 

    public synchronized void write(String s) 
    { 
     try { bw.write(s); } 
     catch (IOException x) {x.printStackTrace();} 
    } 

    public synchronized void close() 
    { 
     try 
     { 
      if (bw != null) 
      { 
       writeln("logged out."); 
       nl(); 
       bw.flush(); 
       bw.close(); 
       closed = true; 

       fos = null; 
       osw = null; 
       bw = null; 
      } 
     } 
     catch(IOException x) { x.printStackTrace(); } 

    } 

    public synchronized boolean isClosed() { return closed; } 

    public synchronized void writeException(Exception x) 
    { 
     writeln(""); 
     write("\t" + x.toString()); nl(); 
     StackTraceElement[] ste = x.getStackTrace(); 
     int j = 0; 
     for (int i = 0; i < ste.length; i++) 
     { 

      if (i < 15) { write("\t\tat " + ste[i].toString()); nl(); } 
      else { j++; } 

     } 

     if (j > 0) { write("\t\t... " + j + " more"); nl(); } 

     nl(2); 
    } 

    private String getTime() 
    { 
     Calendar c = Calendar.getInstance(); 
     int month = c.get(Calendar.MONTH) + 1; 

     int d = c.get(Calendar.DAY_OF_MONTH); 
     int h = c.get(Calendar.HOUR_OF_DAY); 

     int m = c.get(Calendar.MINUTE); 
     int s = c.get(Calendar.SECOND); 
     int y = c.get(Calendar.YEAR); 

     String dd = d < 10 ? "0"+d : ""+d; 
     String hh = h < 10 ? "0"+h : ""+h; 
     String mm = m < 10 ? "0"+m : ""+m; 
     String ss = s < 10 ? "0"+s : ""+s; 
     String sm = month < 10 ? "0"+month : ""+month; 

     return user + " [" + y + "." + sm + "." + dd + " " + hh + ":" + mm + ":" + ss + "]"; 
    } 





} 

答えて

1

間違ったLogクラスを使用していることはほぼ確実です。 sun。*パッケージ内のものは、ユーザーが消費するものではありません。 コードのロギングを希望する場合は、java.util.loggingライブラリまたはlog4jを使用します。あるいは、OSGIがフレームワークを提供するかもしれません。

2

の変数ログ:メソッドNL() 場所:シンボル シンボルを見つけることができません私はlog4jを使用するでしょう。 設定が簡単で正常に動作し、時間を大幅に節約できます。