2012-05-17 2 views
0

Мне нужно написать журнал в текстовый файл, используя простой простой журнал Apache, а не печатать его в System.err.Simple Logger apache common

Я использую FileWriter в методе записи, он создает файл, но не печатает данные из буфера.

protected void log(int type, Object message, Throwable t) { 

    StringBuffer buf = new StringBuffer(); 


    if(showDateTime) { 
     Date now = new Date(); 
     String dateText; 
     synchronized(dateFormatter) { 
      dateText = dateFormatter.format(now); 
     } 
     buf.append(dateText); 
     buf.append(" "); 
    } 


    switch(type) { 
     case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break; 
     case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break; 
     case SimpleLog.LOG_LEVEL_INFO: buf.append("[INFO] "); break; 
     case SimpleLog.LOG_LEVEL_WARN: buf.append("[WARN] "); break; 
     case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break; 
     case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break; 
    } 


    if(showShortName) { 
     if(shortLogName==null) { 

      shortLogName = logName.substring(logName.lastIndexOf(".") + 1); 
      shortLogName = 
       shortLogName.substring(shortLogName.lastIndexOf("/") + 1); 
     } 
     buf.append(String.valueOf(shortLogName)).append(" - "); 
    } else if(showLogName) { 
     buf.append(String.valueOf(logName)).append(" - "); 
    } 


    buf.append(String.valueOf(message)); 


    if(t != null) { 
     buf.append(" <"); 
     buf.append(t.toString()); 
     buf.append(">"); 

     java.io.StringWriter sw= new java.io.StringWriter(1024); 
     java.io.PrintWriter pw= new java.io.PrintWriter(sw); 
     t.printStackTrace(pw); 
     pw.close(); 
     buf.append(sw.toString()); 
    } 


    write(buf); 

} 



protected void write(StringBuffer buffer) { 

     System.err.println(buffer.toString());// want to print to a file rather than to err 

    FileWriter file=new FileWriter(new File("d:/log.txt")); 
    file.write(buffer.toString()); 


} 

ответ

1

Вы должны flush the stream:

file.flush() 

или, если вы действительно сделали запись в файл, вам нужно close the writer. :

file.close() 

close() промывает поток перед закрытием.

+0

Спасибо, что я всегда забыл .. это сработало – Avinash

+0

, но дело в том, что когда я вызываю более одного уровня журналов, выход становится перезаписанным .. например, когда я называю эти три метода, то получается только выход FATAL .. последний печатает на файл logger.info («сообщение :); logger.debug (« message »); logger.fatal (« message »); , пожалуйста, предложите мне об этом. . – Avinash

+0

это сработало..used BufferWriter .. – Avinash

0

Это побеждает цель SimpleLog IMHO. Если вам нужны более сложные функции, такие как запись в файл вместо консоли, вам лучше подключить log4j или просто использовать журналирование jdk для возврата в архив. Один из подходов сохранил бы параметры записи файла (имя файла, ограничение по размеру, опрокидывание, форматирование) в конфигурации вместо кода.