是否可以将perror()生成的消息发送到/ var / log / syslog?

时间:2015-12-11 00:24:30

标签: c error-handling daemon syslog errno

我正在使用perror()来打印错误消息,例如:

pid = fork();
if (pid < 0) {
    perror("couldn't fork");
    exit(EXIT_FAILURE);
}

是否可以使用errno/perror()设施,但将生成的消息定向到系统日志(/var/log/syslog)?

我在一个可以在守护进程和非守护进程模式下运行的程序的上下文中询问这个问题。在守护进程模式下,perror()消息不会出现在syslog上。

3 个答案:

答案 0 :(得分:8)

使用<VisualBrush x:Key="ComboBoxItemIconBrush"> <VisualBrush.Visual> <Path Fill="Crimson" Data="M 25 12 C 11.667228 12 1.25 24.34375 1.25 24.34375 A 1.0001 1.0001 0 0 0 1.25 25.65625 C 1.25 25.65625 11.667228 38 25 38 C 38.332772 38 48.75 25.65625 48.75 25.65625 A 1.0001 1.0001 0 0 0 48.75 24.34375 C 48.75 24.34375 38.332772 12 25 12 z M 25 14 C 27.627272 14 30.141915 14.544587 32.46875 15.375 C 34.032931 17.140338 35 19.450427 35 22 C 35 27.535732 30.535732 32 25 32 C 19.464268 32 15 27.535732 15 22 C 15 19.45074 15.935707 17.139242 17.5 15.375 C 19.834652 14.538846 22.362198 14 25 14 z M 14.1875 16.84375 C 13.439134 18.407614 13 20.155051 13 22 C 13 28.616268 18.383732 34 25 34 C 31.616268 34 37 28.616268 37 22 C 37 20.163179 36.580282 18.404914 35.84375 16.84375 C 41.492764 19.714987 45.555865 23.87765 46.59375 25 C 44.969234 26.756721 35.970973 36 25 36 C 14.029027 36 5.0307657 26.756721 3.40625 25 C 4.4456392 23.876024 8.5256535 19.715345 14.1875 16.84375 z M 25 17 C 22.238576 17 20 19.238576 20 22 C 20 24.761424 22.238576 27 25 27 C 27.761424 27 30 24.761424 30 22 C 30 19.238576 27.761424 17 25 17 z"/> </VisualBrush.Visual> <VisualBrush> 根据错误代码获取错误消息,而不打印它。然后像任何其他日志消息一样将其传递给<ComboBox x:Name="GameCombobox" Margin="20,0,18,0" Height="25" ItemsSource="{Binding Games, Mode=OneWay, Source={x:Static ui:Ui.Instance}}" SelectedValue="Name" IsEditable="False"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock FontFamily="Resources/Fonts/#Lato" FontSize="14px" Foreground="Black" Text="{Binding Name}"/> <StackPanel Orientation="Horizontal"> <Rectangle Fill="{StaticResource ComboBoxItemIconBrush}" Width="45" Height="45"/> <TextBlock FontFamily="Resources/Fonts/#Lato" FontSize="14px" Foreground="#959699" Text="{Binding Players}"/> </StackPanel> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> <ComboBox.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel IsVirtualizing="True" VirtualizationMode="Recycling"></VirtualizingStackPanel> </ItemsPanelTemplate> </ComboBox.ItemsPanel> </ComboBox>

strerror

答案 1 :(得分:2)

最简单的方法是在调用程序时重定向stderr(可能还有stdout)。例如:./myprog 2>&1 | logger

答案 2 :(得分:2)

假设您具有写入syslog的正确权限,我不明白为什么您无法将输出传输到该文件。您还可以将fprintf与stderr一起使用,将错误结果输出到您创建的文件中。