сделайте файл журнала

необходимо сделать это этот путь:

STR=$(echo -ne "Hello World\n===========\n")

Обновление:

Поскольку Fred указал на это, этот способ, которым Вы освободите запаздывание "\n". Для присвоения переменной с расширенными последовательностями обратной косой черты сделайте:

STR=$'Hello World\n===========\n\n'

давайте протестируем его:

echo "[[$STR]]"

дает нам теперь:

[[Hello World
===========

]]

Отметьте, тот $'' отличается, чем $ "". Второе делает перевод согласно текущей локали. Поскольку deital видят раздел QUOTING в man bash.

22
25.04.2011, 09:05
4 ответа

Стандартный способ зарегистрироваться из программы C syslog.

Запустите включением заголовочного файла:

#include <syslog.h>

Затем рано в Вашей программе, необходимо настроить системный журнал путем вызова openlog:

openlog("programname", 0, LOG_USER);

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

Вторым аргументом являются опции, которые Вы хотите использовать, или 0 для нормального поведения. Полный список опций находится в man 3 syslog. Один Вы могли бы найти полезным, LOG_PID, который заставляет системный журнал также записать идентификатор процесса в сообщении журнала.

Затем каждый раз, когда Вы хотите записать сообщение журнала, Вы звоните syslog:

syslog(LOG_INFO, "%s", "Message");

Первым аргументом является приоритет. Приоритет располагается от DEBUG (наименее важный) для EMERG (только для чрезвычайных ситуаций) с DEBUG, INFO, и ERR будучи обычно используемым. Посмотрите man 3 syslog для Ваших опций.

Вторыми и третьими аргументами является формат и сообщение, точно так же, как printf.

Какой файл журнала, в котором это появляется, зависит от Ваших настроек системного журнала.

С установкой по умолчанию это, вероятно, входит /var/log/messages.


Можно настроить пользовательский файл журнала при помощи одного из средств в диапазоне LOG_LOCAL0 кому: LOG_LOCAL7.

Вы используете их путем изменения:

openlog("programname", 0, LOG_USER);

кому:

openlog("programname", 0, LOG_LOCAL0);

или

openlog("programname", 0, LOG_LOCAL1);

и т.д.

и добавление соответствующей записи в /etc/syslog.conf, например.

local1.info /var/log/programname.log

и перезапуск сервера системного журнала, например.

pkill -HUP syslogd

.info часть local1.info выше средств, что все сообщения, которые являются INFO или более важный будет зарегистрирован, включая INFO, NOTICE, ERR (ошибка), CRIT (очень важный), и т.д., но нет DEBUG.


Или, если Вы имеете rsyslog, Вы могли попробовать основанный на свойстве фильтр, например.

:syslogtag, isequal, "programname:"    /var/log/programname.log

syslogtag должен содержать a ":".

Или, если Вы - планирование распределения Вашего программного обеспечения другим людям, это - вероятно, не хорошая идея полагаться на использование LOG_LOCAL или rsyslog фильтр.

В этом случае необходимо использовать LOG_USER (если это - нормальная программа), или LOG_DAEMON (если это - сервер), запишите свое использование сообщений и сообщений об ошибках запуска syslog, но запишите все свои сообщения журнала в файл за пределами syslog. Например, Apache HTTPD регистрируется к /var/log/apache2/* или /var/log/httpd/*, Я принимаю регулярное использование open/fopen и write/printf вызовы.

31
27.01.2020, 19:42
  • 1
    Спасибо. Это - довольно полезная информация, Но объясните больше на log_local0-7 опции. Для, например, Я хочу записать свои данные (которые имеют <сам> слово в строке журнала) в файле self.log. и некоторые входят в систему другие файлы. –  Sushant Jain 25.04.2011, 09:53
  • 2
    Никакая потребность проанализировать значение по умолчанию, предназначенный человеком выходной формат. Использовать --format и --numstat: git log --format='%H %at' --numstat | perl -ne 'if (m/^([[:xdigit:]]{40}) (\d+)$/) { print qq($c\t$t\t$n\t$a\t$r\n) if ($c); ($c,$t) = ($1,$2); $n = $a = $r = 0 }; if (m/^(\d+|-)\t(\d+|-)+\t/) { $n++; $a += $1 if $1 ne q(-); $r += $2 if $2 ne q(-) }' ---------121 джайн--------144602----@Sushant: Какой дистрибутив Linux и версия - Вы предназначение? У Вас есть старый системный журнал (ksyslogd) или rsyslog? rpm -qa | grep syslog или dpkg -l '*syslog*' вероятно, скажет Вам который. –  Mikel 25.04.2011, 10:22
  • 3
    log_local*, откровенно говоря, реликвии от спины когда sysklogd была единственная возможность для программного обеспечения системного журнала. Программное обеспечение Nowadays как syslog-ng, rsyslog и dsyslog существуйте и имейте намного более сложные возможности фильтрации, чем просто сервис/уровень. –  Shadur 25.04.2011, 17:30
  • 4
    Большое спасибо. Моя проблема была решена. У меня есть еще один запрос о парсинге данных, хранивших в файле журнала. Есть ли любой хороший способ сделать это это. На самом деле я пытаюсь сделать системный инструмент статистики. Таким образом, мне нужен он. –  Sushant Jain 27.04.2011, 08:12
  • 5
    @Sushant. Довольный помочь. Отправьте свой вопрос о парсинге журнала как отдельный вопрос так, чтобы люди видели его и предоставили надлежащие ответы. –  Mikel 27.04.2011, 10:49

Вы захотите #include <syslog.h>, затем используйте syslog() функции для отправки данных в любую системную программу входа активны.

См. страницу справочника здесь.

2
27.01.2020, 19:42
  • 1
    () функционирует данные записей в/var/log/syslog., тогда как я хочу записать, входит в систему мой собственный файл. –  Sushant Jain 25.04.2011, 09:24
  • 2
    Как Mikel объясняет ниже Вас, может отметить Ваши сообщения журнала таким способом, которым системным журналом понимают, каковы программа Вы - затем настраиваете системный журнал для записи сообщений журнала программ в другой файл. –  Caleb 25.04.2011, 09:31

Существует много возможностей, каков Ваш план? Вам просто нужна опция зарегистрироваться из командной строки? Смотрите на logger (включенный в bsdutils). Просто введите:

usr@srv % logger test

и это зарегистрирует что-то вроде этого к Вашему /var/log/syslog:

Apr 25 07:55:15 localhost usr: test

см. также man logger. В зависимости от Вашего регистрирующегося демона можно отсортировать эти сообщения в определенные файлы или отфильтровать их приоритетом.

Существуют также некоторые решения для различных языков программирования, поэтому скажите мне, что делает Вы хотите сделать ;-)

1
27.01.2020, 19:42
  • 1
    На самом деле я хочу сделать это с помощью языка C. и у меня есть информация в сообщении mikel. –  Sushant Jain 25.04.2011, 09:54

Фильтрация по названию программы записана по-другому по сравнению с тем, что упомянуто выше для последних версий rsyslog (версия на моей машине 5.8.6), как показано ниже:

if $programname == 'popa3d' then /var/log/popa3d.log

Для большего количества информации посмотрите здесь

1
27.01.2020, 19:42

Теги

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