log4cxx用环境变量设置输出文件名
log4cxx用环境变量设置输出文件名
(金庆的专栏 2016.12)
利用环境变量,可以用同一个log4j.xml来配置多个相似进程,输出日志到不同文件。
例如多个BaseApp进程使用同一个BaseApp.xml配置, SERVER_ID为环境变量:
<appender name="ROLLING" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="log/BaseApp_${SERVER_ID}.log" />
...
</appender>
代码启动时先读取server_id参数,然后设置 SERVER_ID 环境变量,然后再配置log4cxx.
int main(int argc, char* argv[])
{
log4cxx::NDC ndcMain("");
if (argc < 3)
{
LOG_ERROR(Fmt("Usage: %s cfg_file server_id") % argv[0]);
return -1;
}
uint16_t uServerId = (uint16_t)atoi(argv[2]);
if (!Util::SetServerIdEnv(uServerId)) // for log4cxx
return -1;
// Must after SetServerIdEnv().
log4cxx::xml::DOMConfigurator::configureAndWatch("log4j/BaseApp.xml", 5000);
LOG_INFO("--------------------------- ");
LOG_INFO(Fmt("Start base app (ID=%1%).") % uServerId);
LOG_INFO("--------------------------- ");
...
}
SetServerIdEnv() 如下:
bool SetServerIdEnv(uint16_t uServerId)
{
const char LOG_NAME[] = "SetServerIdEnv";
static char buf[128] = {0}; // putenv need a buffer
int nLen = snprintf(buf, sizeof(buf), "SERVER_ID=%u", uServerId);
if (nLen < 0)
{
LOG_ERROR(Fmt("snprintf() failed. (%1%)%2%") % errno % strerror(errno));
return false;
}
int nErr = putenv(buf);
if (0 == nErr) return true;
LOG_ERROR(Fmt("putenv() failed. (%1%)%2%") % errno % strerror(errno));
return false;
}
运行目录下有个log4cxx缺省配置 log4j.xml, 会自动加载,
所以在 log4cxx 显式配置之前也可以调用日志输出。
运行多个BaseApp.exe:
start Debug\Giant_BaseApp.exe cfg.ini 4
start Debug\Giant_BaseApp.exe cfg.ini 3
log4cxx用环境变量设置输出文件名的更多相关文章
- Ubuntu下 jdk环境变量设置
流程 1. 官网下载对应的jdk文件 2. 在根目录 / 下创建一个java目录 mkdir /java 3. 使用mv命令 将下载下来的文件(压缩格式),移动到上一步创建的/java目录下 Ps ...
- AIX系统的环境变量设置
AIX系统的环境变量设置 用户环境的定义是通过设置环境变量来实现的.AIX系统主要使用两大类profile文件来定义用户环境.一类是用来为所有用户定制环境,另一类是为个人定义自己的环境. 登录时,sh ...
- tomcat配置及使用 环境变量设置
Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 我这里是tomcat5.5,解压到的D盘 (路径为: D:\Program Files\tomcat ...
- 【转】linux环境变量设置
1. 显示环境变量HOME $ echo $HOME /home/terry 2. 设置一个新的环境变量WELCOME $ export WELCOME="Hello!" $ ec ...
- Ubuntu 下开发 Android 环境变量设置
-----------------------------------------------------ANDROID_SDK_HOME:/home/cmm/avds PATH:/home/cmm/ ...
- 在Linux里环境变量设置的方法(export PATH)
一般来说,配置交叉编译工具链的时候须要指定编译工具的路径,此时就须要环境变量设置.比如我的mips-linux-gcc编译器在"/opt/au1200_rm/build_tools/bin& ...
- mac laravel 环境变量设置bash_profile
mac laravel 环境变量设置bash_profile >>>vim ~/.bash_profile '''text export PATH=$PATH:~/.composer ...
- 安装 go和beego后的环境变量设置
简介 之前有几次因为环境变量设置的问题 损失了一些时间,特在此做记录 安装golang 可参考官方Getting Started,但有时候有问题. 解压 tar -C /usr/local -xzf ...
- SQL*Plus环境变量设置浅析
SQL*Plus的使用环境是可以通过login.sql 或 glogin.sql脚本来设置的,可能很多初学者或不习惯使用SQL*Plus的老鸟都不知道.因为在如今UI工具(Toad.PL/SQL De ...
随机推荐
- tagName与nodeName的区别
首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2&g ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- rocketmq番外篇(一):开发命令行
匠心零度 转载请注明原创出处,谢谢! 说在前面 虽然是以rocketmq引出的开发命令行,但是任何java应用如果需要都可以借鉴引用,也是通用技术. 主题 rocketmq使用例子 Apache Co ...
- [LeetCode] Kth Smallest Number in Multiplication Table 乘法表中的第K小的数字
Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number ...
- 微信小程序之Todo
wxAppTodos todomvc提供了在当今大多数流行的JavaScript MV*框架概念实现的相同的Todo应用程序,觉得这个小项目挺有意思,最近在学习微信小程序,故用小程序做一版Todo ...
- java.sql.SQLException: null, message from server: "Host '192.168.126.100' is not allowed to connect to this MySQL server"
- 每天记录一点:NetCore获得配置文件 appsettings.json
用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如SqlSugar,NH,Dapper等,在读取连接字符串的时候,往往把信息保存到一 ...
- [UOJ UNR #2]积劳成疾
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 区间最大值的题emmmm 想到构建笛卡尔树,这样自然就想到了一种dp f[i][j]表示大小为i的笛卡尔树,根的权值是j的答案. 转移 ...
- [bzoj4625][BeiJing2016]水晶
来自FallDream的博客,未经允许,请勿转载,谢谢. 不用惊慌,今天的题都不是小强出的.——融入了无数心血的作品,现在却不得不亲手毁掉,难以体会他的心情啊 .——那也是没有办法的事情,能量共振不消 ...
- [bzoj4820][Sdoi2017]硬币游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了 ...