2014-01-13 3 views
2

Я сделал приложение и экспортировал его как файл jar.Как сделать приложение jar генерировать файл журнала сбоев?

Если ошибка jar-приложения по какой-то причине приводит к сбою, я хочу, чтобы он сгенерировал текстовый файл аварийного лога с ошибкой.

Если я запустил приложение в Eclipse, то eclipse всегда сообщает мне, где он разбился, могу ли я получить одно и то же сообщение в текстовом файле вместо того, чтобы запускать приложение как банку?

Я бегу мой Jar-файл, введя следующее: Java -jar MyApplication.jar

Могу ли я добавить что-то к этой команде, чтобы сгенерировать аварию лог, если происходит сбой?

Спасибо!

+0

вы можете использовать рамки протоколирования. прочитайте этот вопрос http://stackoverflow.com/questions/2533614/what-are-the-latest-options-in-java-logging-frameworks – lakshman

+0

yes Вы можете перенаправить журналы на определенном диске (или местоположении) по вашему выбору , – Ashish

+0

@lakshman есть еще один способ регистрации сбоев без необходимости добавлять попытку и улавливать проверку всего, что может упасть? – Skullbox

ответ

4

я использовал этот решение в конце, wh ich работает точно так, как я этого хочу. Каждый раз, когда приложение вылетает, оно сохраняет исключение в текстовом файле в подпапке с именем «crashlogs» с датой и временем в качестве имени файла.

Просто добавил этот код в начале моей основной функции

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    @Override 
    public void uncaughtException(Thread t, Throwable e) { 
     Calendar cal = Calendar.getInstance(); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); 

     String filename = "crashlogs/"+sdf.format(cal.getTime())+".txt"; 

     PrintStream writer; 
     try { 
      writer = new PrintStream(filename, "UTF-8"); 
      writer.println(e.getClass() + ": " + e.getMessage()); 
      for (int i = 0; i < e.getStackTrace().length; i++) { 
       writer.println(e.getStackTrace()[i].toString()); 
      } 

     } catch (FileNotFoundException | UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

    } 
}); 
0

вы можете использовать рамки протоколирования как log4j

простой пример Java

import org.apache.log4j.Logger; 

import java.io.*; 
import java.sql.SQLException; 
import java.util.*; 

public class log4jExample{ 
    /* Get actual class name to be printed on */ 
    static Logger log = Logger.getLogger(
         log4jExample.class.getName()); 

    public static void main(String[] args) 
       throws IOException,SQLException{ 

    log.debug("Hello this is an debug message"); 
    log.info("Hello this is an info message"); 
    } 
} 

log4j.properties

# Define the root logger with appender file 
log = /usr/home/log4j 
log4j.rootLogger = DEBUG, FILE 

# Define the file appender 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=${log}/log.out 

# Define the layout for file appender 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.conversionPattern=%m%n 

Если вы хотите сделать это without loging

Смежные вопросы