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 ...
随机推荐
- Redis Cluster 4.0 on CentOS 6.9 搭建
集群简介 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需 ...
- spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...
- 解决:HTTP 错误 404.0 - Not Found.您要找的资源已被删除、已更名或暂时不可用。(记录帖)
在IIS 上发布web程序时报错,HTTP 错误 404.0 - Not Found.您要找的资源已被删除.已更名或暂时不可用.在网上找了很多资料依然没有解决,后来问了一下同事,他一分钟就帮我搞定了 ...
- leetcode 717. 1-bit and 2-bit Characters -easy
https://leetcode.com/problems/1-bit-and-2-bit-characters/description/ We have two special characters ...
- [LeetCode] Construct the Rectangle 构建矩形
For a web developer, it is very important to know how to design a web page's size. So, given a speci ...
- spring data jpa 组合条件查询封装
/** * 定义一个查询条件容器 * @author lee * * @param <T> */ public class Criteria<T> implements Spe ...
- Centos常用命令之:ln
在linux中[ln]这个命令用来创建连接文件. 共有两种连接文件:一种是类似与Windows的快捷方式(软链接),另一种就是通过文件系统的inode来产生的新的文件名(硬链接). 这里解释下什么叫i ...
- [HNOI2009]无归岛
Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一 ...
- [SDOI2017]序列计数
题目描述 Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知道,有多少个序 ...
- [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...