小编Var*_*dey的帖子

持续监控系统期刊

我正在使用systemd日志来创建自定义日志处理程序.我正在尝试使用sd_journal API,但我有几个问题:

  1. 是否可以在没有轮询的情况下监听运行时日志(SD_JOURNAL_RUNTIME_ONLY)?SD_JOURNAL_FOREACH_DATA和sd_journal_get_data对此没有太多说明.
  2. 在您看来,这是一个很好的设计吗?
  3. 有没有办法了解运行时日志转发的位置?我做了"systemctl status systemd-journald.service"并且服务状态正在运行.但是,当我尝试使用sd_journal_open读取日记时,它不会显示任何条目.我可以通过journalctl查看条目.我想这样做而不读取日志文件(通过sniffing/run/log/journal这是一个unix域套接字)来避免磁盘io.

以下是我使用的示例代码:

#include <stdio.h>                                                                                         
#include <unistd.h>                                                                                        
#include <stdlib.h>                                                                                        

#include <systemd/sd-journal.h>                                                                          
#include <systemd/sd-daemon.h>                                                                           

int main(int argc, char *argv[]) {                                                                       

  int ret_val = 0;                                                                                       
  int count = 0;                                                                                         
  sd_journal *jd;                                                                                        

  sd_journal_print(LOG_INFO, "Hello World, this is PID %lu!", (unsigned long) getpid());                 

  do {                                                                                                   
    ret_val = sd_journal_open (&jd, SD_JOURNAL_SYSTEM | SD_JOURNAL_RUNTIME_ONLY | SD_JOURNAL_LOCAL_ONLY);
    if (ret_val != 0) {                                                                                  
      fprintf(stderr, "Failed to open journal: %s\n", strerror(-ret_val));                               
      break;                                                                                             
    }                                                                                                    

    printf ("Current …
Run Code Online (Sandbox Code Playgroud)

c linux logging journal systemd

5
推荐指数
1
解决办法
933
查看次数

如何从现有的基类对象创建派生类对象?

我正在尝试创建一个派生类对象并使用现有的基类对象填充数据成员(来自基类)。

\n\n

在我的流程生命周期中,我已经有一个基类对象。对于某些决定,我必须创建一个新对象(从基类派生)。实现此目的的一种方法是公开评估者并复制数据。有没有我可以使用聚合初始化或dynamic_cast之类的解决方案?

\n\n
#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass Base {\n    protected: \n        string name_;\n\n    public:\n        Base() : name_ ("foo")\n        {\n        }\n        void ChangeName()\n        {\n            name_ = std::string {"bar"};\n        }\n};\n\nclass Child final : Base {\n    public:\n    string GetName()\n    {\n        return name_;\n    }\n};\n\nint main()\n{\n    Base b;\n    b.ChangeName();\n\n    Child c = {b};\n    cout<<"Hello World. Here is my name: " << c.GetName() << endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

预期输出:\n 你好世界。这是我的名字:酒吧

\n
\n\n

编译错误

\n\n
try.cpp:33:17: error: could not convert \xe2\x80\x98{b}\xe2\x80\x99 from \xe2\x80\x98<brace-enclosed initializer …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

2
推荐指数
1
解决办法
1233
查看次数

跳过已在使用的锁定部分

我有一个只执行一次但被许多场景调用的关键部分。如何执行此线程过程并跳过所有其余调用?

提前致谢。

c# multithreading

1
推荐指数
1
解决办法
1912
查看次数

标签 统计

c ×1

c# ×1

c++ ×1

c++11 ×1

journal ×1

linux ×1

logging ×1

multithreading ×1

systemd ×1