Как контролировать безголовые процессы Java? - PullRequest
1 голос
/ 28 апреля 2011

Я новичок в Java и программировании. Пытаюсь учиться самостоятельно с помощью книг и помощи этого сообщества (спасибо!). Я уверен, что что-то существует, но я не уверен, как подойти к моей проблеме.

Вот немного предыстории: у меня есть Java-приложение, которое работает на сервере и анализирует много страниц (более 20 000). Это занимает несколько часов, и после сбоя его довольно сложно устранить. Поскольку он обрабатывает файлы и записывает их в базу данных, у меня также есть запись в файл, чтобы я мог видеть последнюю запись, с которой работал, до того, как произошел сбой. Иногда это полезно, но иногда это терпит неудачу, и я не уверен почему (потому что это работает на netbeans).

Итак, мой вопрос ... есть ли способ получить тот стек ошибок, который я получаю, когда запускаю приложение в netbeans? вывод файла записывает только то, что я ему говорю, а не стек ошибок. Я попытался запустить задание cron с> error.txt, но это не помогло. Это записано в файл или где-то? В итоге я хочу, чтобы работа выполнялась каждый день, и присылайте мне по электронной почте файл журнала, который я создаю, и тот стек ошибок Java, когда он терпит неудачу.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 28 апреля 2011

Мне кажется, проблема в том, что вы перенаправляете stdout, а не stderr - я считаю, что исключение отправляется в stderr, а ">" перенаправляет stdout.

В bash попробуйте "2>", чтобы перенаправить stderr.

1 голос
/ 28 апреля 2011

Измените ваш основной метод, чтобы сделать что-то вроде этого:

public static main (String[] args)
{
  try
  {
    //your code
  }catch(Exception e){
    e.printStackTrace(yourLoggingPrintStream);
  }
}

см. printStackTrace

В долгосрочной перспективе я рекомендую систему ведения журналов, например log4j или logback(если приложение достаточно важно)

1 голос
/ 28 апреля 2011

Вы можете использовать каркас ведения журнала log4j регистрировать операторы в вашей программе, а также вы можете использовать Thread.dumpStackTrace() в своем коде в тех местах, которые, по вашему мнению, вызывают исключения.

1 голос
/ 28 апреля 2011

Вы смотрели на каркас ведения журнала log4j ?

Вы можете включить регистрацию в своем приложении.также вы можете записать необходимые вещи на File также.

...