Как отправить вывод об исключении в лог?

37 views
Skip to first unread message

Andrey Velikoredchanin

unread,
Dec 9, 2017, 2:00:27 PM12/9/17
to Golang
Всем привет!

Сделал приложение с простой демонизацией. Соответственно, весь вывод логов (а так-же stdout и stderr) перенаправил в файл. 

Однако, оказалось что исключения типа обращения к nil указателю в лог не пишутся. Кто-нибудь может подсказать в какую сторону смотреть что-бы из, все-таки, записывать в лог?

Спасибо.

Daniel Podolsky

unread,
Dec 9, 2017, 2:07:58 PM12/9/17
to gola...@googlegroups.com

Для начала - что такое простая демонизация?

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Andrey Velikoredchanin

unread,
Dec 9, 2017, 2:17:24 PM12/9/17
to golang-ru
Простая демонизация - это демонизация рестартом. Без форков. Вот этим модулем - github.com/VividCortex/godaemon
Этот вариант мне понравился своей очевидностью и незатейливостью. Т.е. простотой.

9 декабря 2017 г., 22:07 пользователь Daniel Podolsky <onok...@gmail.com> написал:

Для начала - что такое простая демонизация?

On Sat, 9 Dec 2017 at 22:00, Andrey Velikoredchanin <uncle...@gmail.com> wrote:
Всем привет!

Сделал приложение с простой демонизацией. Соответственно, весь вывод логов (а так-же stdout и stderr) перенаправил в файл. 

Однако, оказалось что исключения типа обращения к nil указателю в лог не пишутся. Кто-нибудь может подсказать в какую сторону смотреть что-бы из, все-таки, записывать в лог?

Спасибо.

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.

Vladimir

unread,
Dec 9, 2017, 9:53:00 PM12/9/17
to gola...@googlegroups.com
Обращения к nil-указателю вызывают панику, которая, видимо, у вас не
ловится явно. См. https://blog.golang.org/defer-panic-and-recover

9 декабря 2017 г., 22:17 пользователь Andrey Velikoredchanin
<uncle...@gmail.com> написал:
> Простая демонизация - это демонизация рестартом. Без форков. Вот этим
> модулем - github.com/VividCortex/godaemon
> Этот вариант мне понравился своей очевидностью и незатейливостью. Т.е.
> простотой.
>
> 9 декабря 2017 г., 22:07 пользователь Daniel Podolsky <onok...@gmail.com>
> написал:
>
>>
>> Для начала - что такое простая демонизация?
>>
>> On Sat, 9 Dec 2017 at 22:00, Andrey Velikoredchanin <uncle...@gmail.com>
>> wrote:
>>>
>>> Всем привет!
>>>
>>> Сделал приложение с простой демонизацией. Соответственно, весь вывод
>>> логов (а так-же stdout и stderr) перенаправил в файл.
>>>
>>> Однако, оказалось что исключения типа обращения к nil указателю в лог не
>>> пишутся. Кто-нибудь может подсказать в какую сторону смотреть что-бы из,
>>> все-таки, записывать в лог?
>>>
>>> Спасибо.
>>>
>>> --
>>> Вы получили это сообщение, поскольку подписаны на группу "Golang
>>> Russian".
>>> Чтобы отменить подписку на эту группу и больше не получать от нее
>>> сообщения, отправьте письмо на электронный адрес
>>> golang-ru+...@googlegroups.com.
>>> Чтобы настроить другие параметры, перейдите по ссылке
>>> https://groups.google.com/d/optout.
>>
>> --
>> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
>> Чтобы отменить подписку на эту группу и больше не получать от нее
>> сообщения, отправьте письмо на электронный адрес
>> golang-ru+...@googlegroups.com.
>> Чтобы настроить другие параметры, перейдите по ссылке
>> https://groups.google.com/d/optout.
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
> golang-ru+...@googlegroups.com.

Andrey Velikoredchanin

unread,
Dec 10, 2017, 4:18:15 AM12/10/17
to golang-ru
Владимир, спасибо! То, что надо!

10 декабря 2017 г., 5:52 пользователь Vladimir <de...@mechmind.net> написал:

>>> Чтобы настроить другие параметры, перейдите по ссылке
>>> https://groups.google.com/d/optout.
>>
>> --
>> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
>> Чтобы отменить подписку на эту группу и больше не получать от нее
>> сообщения, отправьте письмо на электронный адрес

>> Чтобы настроить другие параметры, перейдите по ссылке
>> https://groups.google.com/d/optout.
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес

> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.

--
Вы получили это сообщение, поскольку подписаны на группу Golang Russian.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.

Daniel Podolsky

unread,
Dec 10, 2017, 5:11:22 AM12/10/17
to gola...@googlegroups.com
вообще-то - нет

recover ловит панику только в своей горутине.

я вчера не мог написать, но мой поинт в том, что

1. демонизация приложения на go не может быть простой. в общем случае
- она вообще не может быть
2. не надо приложению заниматься своими логами, оно не может делать это хорошо
3. используйте супервизор (в идеале - systemd), и для демонизации, и
для сбора логов.
>> >>> golang-ru+...@googlegroups.com.
>> >>> Чтобы настроить другие параметры, перейдите по ссылке
>> >>> https://groups.google.com/d/optout.
>> >>
>> >> --
>> >> Вы получили это сообщение, поскольку подписаны на группу "Golang
>> >> Russian".
>> >> Чтобы отменить подписку на эту группу и больше не получать от нее
>> >> сообщения, отправьте письмо на электронный адрес
>> >> golang-ru+...@googlegroups.com.
>> >> Чтобы настроить другие параметры, перейдите по ссылке
>> >> https://groups.google.com/d/optout.
>> >
>> >
>> > --
>> > Вы получили это сообщение, поскольку подписаны на группу "Golang
>> > Russian".
>> > Чтобы отменить подписку на эту группу и больше не получать от нее
>> > сообщения,
>> > отправьте письмо на электронный адрес
>> > golang-ru+...@googlegroups.com.
>> > Чтобы настроить другие параметры, перейдите по ссылке
>> > https://groups.google.com/d/optout.
>>
>> --
>> Вы получили это сообщение, поскольку подписаны на группу Golang Russian.
>>
>> Чтобы отменить подписку на эту группу и больше не получать от нее
>> сообщения, отправьте письмо на электронный адрес
>> golang-ru+...@googlegroups.com.
>> Настройки подписки и доставки писем: https://groups.google.com/d/optout.
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
> golang-ru+...@googlegroups.com.

Andrey Velikoredchanin

unread,
Dec 10, 2017, 6:01:01 AM12/10/17
to golang-ru
10 декабря 2017 г., 13:11 пользователь Daniel Podolsky <onok...@gmail.com> написал:

вообще-то - нет

recover ловит панику только в своей горутине.

Я это учел. Конечно, пришлось добавить deffer для каждой горутины.
 

я вчера не мог написать, но мой поинт в том, что

1. демонизация приложения на go не может быть простой. в общем случае
- она вообще не может быть

Если извращаться через fork - согласен. Мне лично такой вариант не нравится категорически. Но если приложение просто само себя запускает иммитируя запуск с & в конце - почему нет?
 
2. не надо приложению заниматься своими логами, оно не может делать это хорошо

Ну не знаю. У меня получилось. В том числе и ротация логов.
 
3. используйте супервизор (в идеале - systemd), и для демонизации, и
для сбора логов.

Пытался разобраться. Через код в go это оказалось сделать проще.
 

>> >>> Чтобы настроить другие параметры, перейдите по ссылке
>> >>> https://groups.google.com/d/optout.
>> >>
>> >> --
>> >> Вы получили это сообщение, поскольку подписаны на группу "Golang
>> >> Russian".
>> >> Чтобы отменить подписку на эту группу и больше не получать от нее
>> >> сообщения, отправьте письмо на электронный адрес

>> >> Чтобы настроить другие параметры, перейдите по ссылке
>> >> https://groups.google.com/d/optout.
>> >
>> >
>> > --
>> > Вы получили это сообщение, поскольку подписаны на группу "Golang
>> > Russian".
>> > Чтобы отменить подписку на эту группу и больше не получать от нее
>> > сообщения,
>> > отправьте письмо на электронный адрес

>> > Чтобы настроить другие параметры, перейдите по ссылке
>> > https://groups.google.com/d/optout.
>>
>> --
>> Вы получили это сообщение, поскольку подписаны на группу Golang Russian.
>>
>> Чтобы отменить подписку на эту группу и больше не получать от нее
>> сообщения, отправьте письмо на электронный адрес

>> Настройки подписки и доставки писем: https://groups.google.com/d/optout.
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес

> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.

--
Вы получили это сообщение, поскольку подписаны на группу Golang Russian.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.

Daniel Podolsky

unread,
Dec 10, 2017, 7:27:50 PM12/10/17
to gola...@googlegroups.com
> Я это учел. Конечно, пришлось добавить deffer для каждой горутины.

вы не учли, что совсем не все горутины вам доступны

> Если извращаться через fork - согласен. Мне лично такой вариант не нравится
> категорически. Но если приложение просто само себя запускает иммитируя
> запуск с & в конце - почему нет?

демонизация - это немного больше, чем "запуск с & в конце"

> Ну не знаю. У меня получилось. В том числе и ротация логов.

скорее всего - вы просто не учли что-нибудь.

> Пытался разобраться. Через код в go это оказалось сделать проще.

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

Andrey Velikoredchanin

unread,
Dec 11, 2017, 3:42:18 AM12/11/17
to golang-ru
Ну, результат меня устраивает. Если найдется какой-нибудь косяк, связанный с этим, тогда буду упрощать в сторону systemd.

На счет недоступных горотин - ничего страшного. Мне главное отловить панику в моем предметном коде.

11 декабря 2017 г., 3:27 пользователь Daniel Podolsky <onok...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages