rsyslog写入同步文件不会阻止
rsyslog writing to synchronous file does not block
我在ubuntu 16.04上使用rsyslog版本8.16.0。我正在为C Syslog包装纸编写一些测试。在包装器中,我只致电Syslog(3)。
配置文件中只有一个规则。
user.* /var/log/user.log
我关闭了过滤器重复消息,我可以看到日志文件中的所有消息。
在测试期间,我注意到Syslog调用没有阻止。
TEST(BlockingTest, block)
{
ifstream file;
long oriPos=0;
long newPos=0;
int offset = strlen("Nov 28 13:07:01 4dac2c62ebe7 logTest: blockinglogger: blocking call")+1;
file.open("/var/log/user.log");
if(file.is_open())
{
file.seekg(0,ios::end);
oriPos = file.tellg();
}
file.close();
Syslogging::Logger logger("blockinglogger",Syslogging::Level::DEBUG);
logger.debug("blocking call");
// This needs to be here else undefined behavior.
this_thread::sleep_for(chrono::milliseconds(2));
file.open("/var/log/user.log");
if(file.is_open())
{
file.seekg(0,ios::end);
newPos = file.tellg();
}
file.close();
EXPECT_EQ(newPos, oriPos+offset);
}
我认为使用上面的配置将对每个系统拨打调用进行阻止,直到将其写入文件为止。但是我需要少量超时,否则我会得到不确定的行为(有时它会通过,有时会失败)。
我需要其他设置还是可以更清楚地解释此行为的任何人?
编辑:系统不会在用户级别进行任何其他登录。user.log文件仅包含测试中的条目。因此,由于随机的其他日志,它并不是未定义的。
编辑:我已经确认没有包装代码的相同行为。
int main()
{
for(int i=0;i<20;i++)
{
ifstream file;
long oriPos=0;
long newPos=0;
std::string s = "Nov 28 15:48:01 jova syslogTest: blocking call"+ std::to_string(i);
int offset = s.length()+1;
//cout << "off: " << offset << endl;
file.open("/var/log/user.log");
if(file.is_open())
{
file.seekg(0,ios::end);
oriPos = file.tellg();
//cout << "ori: " << oriPos << endl;
}
file.close();
std::string l = "blocking call" + std::to_string(i);
syslog(LOG_DEBUG, "%s", l.c_str());
// THIS IS NEEDED..
this_thread::sleep_for(chrono::milliseconds(5));
file.open("/var/log/user.log");
if(file.is_open())
{
file.seekg(0,ios::end);
newPos = file.tellg();
//cout << "new: " << newPos << endl;
}
file.close();
if(newPos == oriPos+offset)
{
cout << "SAME" << endl;
}
else
{
cout << "DIFFERENT" << endl;
}
}
}
syslog系统调用不写入文件。它写入/dev/log unix域插座。Syslog守护程序(RSYSLOG)在/dev/log上听,并从那里进行任何配置。/dev/log套接字是数据报套接字,因此无法阻止某些东西。
相关文章:
- 同步文件读取同一文件 c
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 从 FutureAccessList 同步获取文件夹路径
- UWP 是否有同步文件读/写 API
- git:将同一文件的两个位置保持同步
- 与更新的输入文件同步程序
- rsyslog写入同步文件不会阻止
- 用于文件同步的简单客户端
- 如何将记忆映射的文件与另一个进程写入文件同步
- QFileInfo 是否与文件同步
- 如何同步 2 个或更多监视文件夹
- 实现定义的文件流同步 - 原因
- FTP 文件夹同步 c / obj c.
- 关闭 fstream 是否保证文件系统同步
- 同步文件和更改数据的最佳方式
- 同步文件,删除相同的数据
- 在文件中存储和同步字符串列表
- 同步文件与sqlite数据库qt c++
- 在不锁定文件的情况下同步更新文件
- Turbo c++文件同步问题