最近发现项目监控系统的log文件增长很快,通过tail -f 查看,几乎刷屏,就研究了一下,发现监控模块在启动时,打开log文件,设置下log级别,此后log级别没法更改。如果log级别设置不当,可能造成log信息不全或者log太多,于是想改成动态调整。仔细想了下,决定使用发送信号来实现。本来想发送信号时,通过终端实时交互设置,发现实现麻烦,最后决定通过读取一个写入log级别的文件实现。
大概步骤如下:
1)在程序启动时,注册SIGUSR1的信号监听;
signal(SIGUSR1,SIGUSR1Handler);
2)在SIGUSR1信号监听处理中,读取程序目录下的一个文件,该文件写入一个代表级别的数字1-8,读取后设置log级别。
void SIGUSR1Handler(int iSignum)
{
char level;
LogLevel ll;
level = getLevel();
switch(level)
{
case '1':
ll = L_NONE;
break;
case '2':
ll = L_CRIT;
break;
case '3':
ll = L_ERROR;
break;
case '4':
ll = L_WARN;
break;
case '5':
ll = L_INFO;
break;
case '6':
ll = L_DEBUG;
break;
case '7':
ll = L_TRACE;
break;
case '8':