log4cpp日志不能是溶液子体积



我们的项目用途log4cpp由于日志输出模块,但在使用中发现,假设Services,或者是在Windows Server版本号。不会有一个正常的日志切削现象。该日志已被写入到文件中,持续,即使超过规定的文件大小。也不会分卷。

log4cpp中切割日志的核心算法为:(如果同意的最大文件个数为4)

1.关闭xxx.log.

2.删除 xxx.log.4

3.是一个loop, 将xxx.log.3--->xxx.log.4,xxx.log.2--->xxx.log.3,xxx.log.1----->xxx.log.2

4.将xxx.log--->xxx.log.1

5.打开xxx.log.

相关代码为:

void RollingFileAppender::rollOver() {
      ::close(_fd); // 1
      if (_maxBackupIndex > 0) {
           std::ostringstream oldName;
           oldName << _fileName << "." << _maxBackupIndex << std::ends;
           ::remove(oldName.str().c_str());   //2  

           size_t n = _fileName.length() + 1;
           for(unsigned int i = _maxBackupIndex; i > 1; i--) {  //3
                 std::string newName = oldName.str();
                 oldName.seekp(n);
                 oldName << i-1 << std::ends;
                 ::rename(oldName.str().c_str(), newName.c_str());
            }  

           ::rename(_fileName.c_str(), oldName.str().c_str()); //4
      }
      _fd = ::open(_fileName.c_str(), _flags, _mode);//5
}

日志文件无法切割(眼下发现仅仅在win server版本号无法work),原因出在步骤1,4,5上。

关闭文件后,随后将文件重命名,会导致重命名失败。通过打印错误码得知,错误码为32,意思为:文件句柄被占用。

解决方式为。往两个不同的文件中中写日志。不再仅仅往一个文件名称里写日志,交替写日志,交替关闭文件。write(A),close(B)---->Write(B),Close(A),----->Write(A),Close(B).

改动后的代码为:

void RollingFileAppender::rollOver() {
        ::close(_fd);
        if (_maxBackupIndex > 0) {
            std::ostringstream oldName;
            oldName << _fileName << "." << _maxBackupIndex << std::ends;
            ::remove(oldName.str().c_str());
            size_t n = _fileName.length() + 1;
            for(unsigned int i = _maxBackupIndex; i > 1; i--) {
                std::string newName = oldName.str();
                oldName.seekp(n);  

                oldName << i-1 << std::ends;
                ::rename(oldName.str().c_str(), newName.c_str());
            }
if(_bUsingTempFile)
            ::rename(_fileNameTmp.c_str(), oldName.str().c_str());
else
            ::rename(_fileName.c_str(), oldName.str().c_str());
        }
if(_bUsingTempFile)
        _fd = ::open(_fileName.c_str(), _flags, _mode);
else
        _fd = ::open(_fileNameTmp.c_str(), _flags, _mode);
        _bUsingTempFile = !_bUsingTempFile;
    }  

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-12-28 15:56:21

log4cpp日志不能是溶液子体积的相关文章

log4cpp日志无法分卷的解决方案

 我们的项目采用log4cpp作为日志输出模块,但在使用中发现,如果是一个Services,或者是在Windows Server版本上,会出现日志无法正常分割的现象.即日志一直往一个文件里持续写,即使超过规定的文件大小,也不会分卷. log4cpp中分割日志的核心算法为:(假设允许的最大文件个数为4) 1.关闭xxx.log. 2.删除 xxx.log.4 3.是一个loop, 将xxx.log.3--->xxx.log.4,xxx.log.2--->xxx.log.3,xxx.log.1

log4cpp 日志库

说明 log4cpp编译安装的路径是/opt/log4cpp 问题:如何正确引入动态库 1.修改/etc/ld.so.conf文件,将/opt/log4cpp/lib添加到文件末尾,该文件主要被ldconfig指令用来搜索可共享的动态链接库 2.执行ldconfig,根据修改的文件内容,创建出动态装入程序所需的连接和缓存文件,提供给系统动态库调用 手动: g++ test.cpp -I/opt/log4cpp/include -L/opt/log4cpp/lib/ -llog4cpp -lpth

4-Nginx 日志管理

一.Nginx日志配置 分类 access_log 访问日志配置 log_format 定义日志格式 open_log_file_cache 设置日志缓存 log_not_found 记录不存在 日志配置 log_subrequest 记录子请求的日志配置 rewrite_log Rewrite 日志 error_log 错误日志 二.日志配置 1.access_log 配置 语法:access_log path [format [buffer=size [flush=time]]]; acce

Logback日志配置的简单使用

Logback介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-core是其它两个模块的基础模块.logback-classic是log4j的一个 改良版本.此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging.logback-access访问模块与Servlet

logback的使用和logback.xml详解,在Spring项目中使用log打印日志

logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集

:Linux 系统日志管理 日志转储

Linux日志服务器设置 使用“@IP:端口”或“@@IP:端口”的格式可以把日志发送到远程主机上. 假设需要管理几十台服务器,每天的重要工作就是查看这些服务器的日志,可是每台服务器单独登录,并且查看日志非常烦琐,此时可以把几十台服务器的日志集中到一台日志服务器上吗?这样每天只要登录这台日志服务器,就可以查看所有服务器的日志,. 设置过程 假设服务器端的服务器 IP 地址是 192.168.0.210,主机名是 localhost.localdomain:客户端的服务器 IP 地址是 192.1

LogBack日志小记

优势 看了一下Logback的官方文档,说换成LogBack的原因大概有一下几个: 1. 说是logBack的设计开发和log4j是同一批人员,重写了内核,习惯上总体跟log4j一样,不会有太多生疏感.在一些关键路径上性能快乐很多, 初始化的内存更小. 2. 文档说最推荐的一点是 logBack经过了比log4j更长时间和全面的测试,更加稳定. 3. Logback-classic非常自然实现了SLF4j:Logback-classic实现了SLF4j.在使用SLF4j中,你都感觉不到logba

Apache虚拟主机案例演示

基于dns的实验拓扑上构建网站服务器,这里以apache来搭建 首先进入科普: url=协议+主机地址或域名+资源地址 www服务使用排名  查询网站https://w3techs.com/ 1.Apache49.9%-0.5%  中小型静态web主流,web服务器中老大 2.Nginx33.4%+0.7%  大型新兴今天web主流,web服务器中的初生牛犊 3.Microsoft-IIS11.3%-0.2%  微软web服务器 4.LiteSpeed2.5% 5.Google Servers1

Redis 操作

1.配置redis环境变量 [[email protected] ~]# echo export PATH=/usr/local/redis/bin/:$PATH >> /etc/profile [[email protected] ~]# source /etc/profile 2.redis相关操作,字符串,HASH,集合,有序集合,列表,发布.订阅,等 [[email protected] ~]# redis-cli -h 192.168.2.10 -p 6379 # 连接 192.16