Как получить журнал или сообщение об ошибке из любого приложения, запущенного из терминала?

Я хочу знать, как получить файл журнала программы. Это полезно, чтобы найти ошибки в приложении, когда оно падает.

Я имею в виду открытие приложения через терминал и одновременно запись файла журнала.

Существуют ли специальные команды для этого или они выполняются автоматически при каждом запуске приложения? Если да, где хранится этот файл журнала?

3
задан 15 November 2013 в 05:44

2 ответа

Не все приложения оставят журнал, это зависит от кодировки, даже сложные могут не иметь возможности регистрации.

Если приложение имеет возможности отладки, подробного или журнального ввода, эта опция будет объявлена ​​на странице man этого приложения, то есть: man ssh покажет вам, что если вы используете ssh -v, вы получите подробный вывод о том, что команда делает в фоновом режиме при открытии туннеля для хоста, ssh -y выведет в syslog вместо stderr.

Но некоторые приложения просто не запрограммированы с этой возможностью. Для тех, кто strace может быть использован в качестве утилиты отладки для любого приложения, хотя, он регистрирует все системные вызовы и сигналы, я нахожу это полезным, когда у меня возникают какие-либо сбои или неожиданные сбои во время работы приложения, и в большинстве случаев это помогает мне сортировать проблемы с приложениями, в которых нет встроенной в их код функции отладки или регистрации, например, выводит strace ls:

execve("/usr/bin/ls", ["ls"], [/* 95 vars */]) = 0
brk(0)                                  = 0x20b6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd7e5ca3000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=118369, ...}) = 0
mmap(NULL, 118369, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd7e5c86000
close(3)                                = 0
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20l\0\0\0\0\0\0"..., 832) = 832
...
...
...

Это позволяет вам понять, что происходит и почему приложение не может остановить свой код.

0
ответ дан 15 November 2013 в 05:44

Я думаю, что все, что вам нужно, это увидеть текст в терминале и одновременно записать его в файл:

ls -l | tee -a ls.log

Здесь перечислены ваши файлы в терминале и в ls.log. -a предназначен для добавления вместо перезаписи в случае, если существует ls.log.

Обратите внимание, что это не работает для терминальных приложений, таких как less или top, или для всего, что имеет меню и свитки.

Если в «журнале» отсутствует какой-либо текст, необходимо перенаправить сообщения об ошибках на стандартный вывод:

ls filedoesnotexist_or_whatever_leads_to_an_error 2>&1 | tee -a ls.log
0
ответ дан 15 November 2013 в 05:44
  • 1
    Очень распространенный для получения некоторых мерцаний и такого, когда xrandr корректируется. – walttheboss 14 May 2015 в 02:42

Другие вопросы по тегам:

Похожие вопросы: