необходимо сделать это этот путь:
STR=$(echo -ne "Hello World\n===========\n")
Обновление:
Поскольку Fred указал на это, этот способ, которым Вы освободите запаздывание "\n". Для присвоения переменной с расширенными последовательностями обратной косой черты сделайте:
STR=$'Hello World\n===========\n\n'
давайте протестируем его:
echo "[[$STR]]"
дает нам теперь:
[[Hello World
===========
]]
Отметьте, тот $'' отличается, чем $ "". Второе делает перевод согласно текущей локали. Поскольку deital видят раздел QUOTING в man bash
.
Стандартный способ зарегистрироваться из программы 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
Или, если Вы - планирование распределения Вашего программного обеспечения другим людям, это - вероятно, не хорошая идея полагаться на использование LOG_LOCAL
или rsyslog
фильтр.
В этом случае необходимо использовать LOG_USER
(если это - нормальная программа), или LOG_DAEMON
(если это - сервер), запишите свое использование сообщений и сообщений об ошибках запуска syslog
, но запишите все свои сообщения журнала в файл за пределами syslog
. Например, Apache HTTPD регистрируется к /var/log/apache2/*
или /var/log/httpd/*
, Я принимаю регулярное использование open
/fopen
и write
/printf
вызовы.
Вы захотите #include <syslog.h>
, затем используйте syslog()
функции для отправки данных в любую системную программу входа активны.
Существует много возможностей, каков Ваш план? Вам просто нужна опция зарегистрироваться из командной строки? Смотрите на logger
(включенный в bsdutils). Просто введите:
usr@srv % logger test
и это зарегистрирует что-то вроде этого к Вашему /var/log/syslog
:
Apr 25 07:55:15 localhost usr: test
см. также man logger
. В зависимости от Вашего регистрирующегося демона можно отсортировать эти сообщения в определенные файлы или отфильтровать их приоритетом.
Существуют также некоторые решения для различных языков программирования, поэтому скажите мне, что делает Вы хотите сделать ;-)
Фильтрация по названию программы записана по-другому по сравнению с тем, что упомянуто выше для последних версий rsyslog
(версия на моей машине 5.8.6), как показано ниже:
if $programname == 'popa3d' then /var/log/popa3d.log
Для большего количества информации посмотрите здесь
--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:22sysklogd
была единственная возможность для программного обеспечения системного журнала. Программное обеспечение Nowadays какsyslog-ng
,rsyslog
иdsyslog
существуйте и имейте намного более сложные возможности фильтрации, чем просто сервис/уровень. – Shadur 25.04.2011, 17:30