(1)官网的一个例子

  • #include <log4cxx/logger.h>
    #include <log4cxx/helpers/pool.h>
    #include <log4cxx/basicconfigurator.h>
    #include <log4cxx/fileappender.h>
    #include <log4cxx/simplelayout.h> int main() {
    log4cxx::FileAppender * fileAppender = new
    log4cxx::FileAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout()),
    "logfile", false); log4cxx::helpers::Pool p;
    fileAppender->activateOptions(p); log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(fileAppender));
    log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getDebug());
    log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger"); LOG4CXX_INFO(logger,"Created FileAppender appender"); return 0;
    }

(2)一个只使用代码的例子dailyrollingfileappender(经过验证)

 ostringstream oss;
oss << getpid();
string pid= oss.str();
MDC::put("pid", oss.str()); //使得layout中可以携带进程号信息 PatternLayoutPtr layout = new PatternLayout();
string conversionPattern = "[%p] %d %c %M - %m%n";
layout->setConversionPattern(conversionPattern);
// creates daily rolling file appender
DailyRollingFileAppenderPtr rollingAppenderptr = new DailyRollingFileAppender();
rollingAppenderptr->setFile("/opt/bre/LrSortService/log/LrSortService.log."+pid);
rollingAppenderptr->setDatePattern("'.'yyyy-MM-dd");
rollingAppenderptr->setLayout(layout);
log4cxx::helpers::Pool p;
rollingAppenderptr->activateOptions(p); // configures the root logger
log4cxx::LoggerPtr logger = log4cxx::Logger::getRootLogger();
logger->setLevel(log4cxx::Level::getDebug());
logger->addAppender(rollingAppenderptr); LOG4CXX_INFO(logger,"Created FileAppender appender");

(3)一个例子。使用RollingFileAppender和TimeBasedRollingPolicy(未经验证)

private static void log4jConfig(String actionName) {

    org.apache.log4j.Logger rootLogger = LogManager.getRootLogger();
RollingFileAppender fileAppender = (RollingFileAppender)rootLogger.getAppender("fileAppender"); // <param name="FileNamePattern" value="/var/log/Launcher.log.%d{yyyy-MM-dd}.gz"/>
String currentLogFile = fileAppender.getFile();
String newLogPattern = currentLogFile.replace(LOG4J_ROLLING_FILE_NAME_TOKEN, actionName);
fileAppender.setFile(newLogPattern); TimeBasedRollingPolicy timeBasedRollingPolicy = (TimeBasedRollingPolicy) fileAppender.getRollingPolicy();
String fileNamePattern = timeBasedRollingPolicy.getFileNamePattern();
String newFileNamePattern = fileNamePattern.replace(LOG4J_ROLLING_FILE_NAME_TOKEN, actionName);;
timeBasedRollingPolicy.setFileNamePattern(newFileNamePattern);
timeBasedRollingPolicy.activateOptions(); fileAppender.activateOptions(); LOG.info(" Redirected launcher log output to log pattern: " + newFileNamePattern);
}

(4)一个使用xml配置文件和代码协同工作的例子。(有问题)

参考:http://stackoverflow.com/questions/29769018/log4cxx-timebasedrollingpolicy-wont-keep-old-log-when-used-programtically

i'm trying use log4cxx combined with xml file and code in multiprocess, hope each process create a log and can rollback in TimeBasedRollingPolicy. here is my xml file:

<?xml version="1.0" encoding="UTF-8" ?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="bfd_recommend_appender" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="/opt/bre/LrSortService/log/LrSortService.log.%d{yyyyMMdd}" />
</rollingPolicy> <layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p %d (%F:%L:%c) @ %X{pid}] - %m%n" />
</layout>
</appender>
<!-- Specify the level for some specific categories -->
<root>
<level value="debug" />
<appender-ref ref="bfd_recommend_appender"/>
</root>
</log4j:configuration>

then my code:

void LrSortService::InitLog(const std::string& logconf) {
ostringstream oss;
oss << getpid();
MDC::put("pid", oss.str());
DOMConfigurator::configure(logconf);
LoggerPtr logger(log4cxx::Logger::getRootLogger());
FileAppenderPtr oldappenderptr;
oldappenderptr = logger->getAppender("bfd_recommend_appender");
string oldfile = oldappenderptr->getFile();
string pid = oss.str();
string newfile1 = oldfile + ".";
string newfile = newfile1 + pid;
oldappenderptr->setFile(newfile);
log4cxx::helpers::Pool p;
oldappenderptr->activateOptions(p);
cout<<"set log OK , log filename is: "<<newfile<<endl;
}

what i got:

-rw-rw-r-- 1 bre bre  1809500 Apr 20 23:59 LrSortService.log.20150420
-rw-rw-r-- 1 bre bre 26807477 Apr 21 17:37 LrSortService.log.20150420.2297
-rw-rw-r-- 1 bre bre 23429289 Apr 21 17:37 LrSortService.log.20150420.2374
-rw-rw-r-- 1 bre bre 23546280 Apr 21 17:37 LrSortService.log.20150420.2451
-rw-rw-r-- 1 bre bre 22566813 Apr 21 17:37 LrSortService.log.20150420.2528

and yesterday i got:

  LrSortService.log.20150420.2297
LrSortService.log.20150420.2374
LrSortService.log.20150420.2451
LrSortService.log.20150420.2528

what i meant to get is (today is 20150421):

LrSortService.log.20150420.2297
LrSortService.log.20150420.2374
LrSortService.log.20150420.2451
LrSortService.log.20150420.2528
LrSortService.log.20150421.2297
LrSortService.log.20150421.2374
LrSortService.log.20150421.2451
LrSortService.log.20150421.2528

any help will be appreciated ,thanks !

log4cxx 使用代码进行配置的更多相关文章

  1. AngularJS-系统代码的配置和翻译

    前言:在Web开发中常常会遇到这样的情况,有些页面的下拉选项是固定不变的几个,比如:性别,一般有男.女.保密等.对于这样的情形我们一般在数据库中存储的是数字或者其对应的代码,如果是可维护的需要系统给出 ...

  2. Entity Framework入门教程(18)---EF6中基于代码进行配置方式

    EF6中基于代码进行配置方式 我们以前对EF进行配置时是在app.config/web.config下的<entityframework>节点下进行配置的,EF6引进了基于代码的配置方法. ...

  3. 【译】第38节---EF6-基于代码的配置

    原文:http://www.entityframeworktutorial.net/entityframework6/code-based-configuration.aspx EF6引入了基于代码的 ...

  4. TestNG方法測试及注意要点 代码及配置具体解释(解决testng方法不运行问题)

    教你解决为什么TestNG中方法加了@Test注解,也在配置文件里配置了,可是方法就是不运行! 在使用TestNG进行測试时,使用配置文件的方式更easy于维护.可是常常遇到明明方法写了也配置运行了, ...

  5. Eclipse 代码风格配置

    代码风格配置:

  6. [译]17-spring基于java代码的配置元数据

    spring还支持基于java代码的配置元数据.不过这种方式不太常用,但是还有一些人使用.所以还是很有必要介绍一下. spring基于java代码的配置元数据,可以通过@Configuration注解 ...

  7. 使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置

    1.使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置 2.上代码:在resources目录下新建:generatorConfiguration.xml文 ...

  8. 代码方式配置springmvc的字符集过滤器

    之前一直用的xml方式配置 <filter> <filter-name>encoding</filter-name> <filter-class>org ...

  9. VS CODE一些常见配置操作(快捷键设置、C/C++的debug、代码路径配置)

    总述     今天来一篇简单的操作文章吧,VSCODE是我们经常用的软件,我之前也写过关于VSCODE远程办公的一些的操作(有兴趣的朋友可以点击进去看看),今天我再稍微介绍一些我其他地方用到的一些操作 ...

随机推荐

  1. synchronized细节问题

    一.synchronized有锁重入的特点,某个线程得到对象的锁后,再次请求此对象可以再次得到改对象的锁.如下示例,在method1中调用method2,在method2中调用method3,而met ...

  2. (转载)uefi启动解析:由原理到实例

    这是本文的全部内容:A:什么是UEFI,其含义B:UEFI模块包含的文件逐个分析及其引导流程+ESP分区的本质C:判断自己的机器是X64(64 bit)构架还是IA32(32 bit)的构架D:给传统 ...

  3. Intent的几种Flag的不同

    冬天有点冷,不想写博客. 研究下Intent的几种Flag的不同: 1,FLAG_ACTIVITY_CLEAR_TOP:会清理掉目标activity栈上面所有的activity Intent inte ...

  4. Hibernate3 第一天

    Hibernate3 第一天 课程安排:4天(框架的使用+理论知识) 第一天Hibernate快速入门(单表的CRUD)+核心api讲解(配置+接口) 第二天:Hibernate一级缓存,快照,对象持 ...

  5. 02--Java TCP Socket编程

    一.基础知识 1. TCP状态转换知识,可参考: http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 2. TCP/IP五层模型   ...

  6. Sass编译Css

    1.我新建了一个项目工程 2.路径在 3.编译 sass 要编译的sass文件名.scss ../存放编译后的css目录/编译后的css名称.css 4.刷新项目,就编译出来了 6.当然,你要嫌麻烦的 ...

  7. 【转载】javascript 杂谈之哪种写法你更喜欢?

    转载自:http://www.cnblogs.com/baochuan/archive/2012/04/30/2473771.html 思维导图  介绍   老是在写js,你平时是怎么写你的js呢?更 ...

  8. ggplot2 theme相关设置—线条设置

    在ggplot的主题射中有一部分图需要对图中的部分线条进行设置 element_line(colour = NULL, size = NULL, linetype = NULL, lineend = ...

  9. 6、Spring+Struts2+MyBatis(mybatis有代理)整合增删改查

    1.创建如下的oracle脚本 create table userinfo (id ), name ), password telephone ), isadmin )); --4.2 用户表序列 c ...

  10. lldpd启动脚本分析

    #!/bin/sh /etc/rc.common # Copyright (C) 2008-2012 OpenWrt.org #启动顺序 START=90 #创建PID文件 SERVICE_USE_P ...