java_log4j多文件配置
今天配置了log4j中写多个文件的内容,配置了半天才搞出来,为了避免类似问题,写个博客吧。
首先说一下需求,每天要在7个文件夹中生成文件,文件格式为xxx.log.2000.01.01,自己开发个写文件工具也不是不可以,但是一想log4j有现成的功能,何乐而不为呢,思想胜于一切。所以需要一个logger对应一个文件,开始配置,我定义了7个rootLogger,分别是
charge_log, gold_log, prop_log, register_log, active_log, game_play_log, online_log
</pre><pre name="code" class="plain">timer_log是错误日志记录。
log4j.rootLogger=INFO,stdout, timer_log, charge_log, gold_log, prop_log, register_log, active_log, game_play_log, online_log log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.timer_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.timer_log.Append=true
log4j.appender.timer_log.DatePattern='.'yyyy-MM-dd
log4j.appender.timer_log.File=../logs/timer/timer.log
log4j.appender.timer_log.Threshold=INFO
log4j.appender.timer_log.layout=org.apache.log4j.PatternLayout
log4j.appender.timer_log.layout.ConversionPattern=%d - %c [%t] %-5p %c %x %l - %m%n log4j.logger.charge_log=INFO, charge_log
log4j.appender.charge_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.charge_log.Append=true
log4j.appender.charge_log.DatePattern='.'yyyy-MM-dd
log4j.appender.charge_log.File=../logs/charge_log/charge.log
log4j.appender.charge_log.Threshold=INFO
log4j.appender.charge_log.layout=org.apache.log4j.PatternLayout
log4j.appender.charge_log.layout.ConversionPattern=%m%n
log4j.additivity.charge_log=false log4j.logger.gold_log=INFO, gold_log
log4j.appender.gold_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.gold_log.Append=true
log4j.appender.gold_log.DatePattern='.'yyyy-MM-dd
log4j.appender.gold_log.File=../logs/gold_log/gold_log.log
log4j.appender.gold_log.Threshold=INFO
log4j.appender.gold_log.layout=org.apache.log4j.PatternLayout
log4j.appender.gold_log.layout.ConversionPattern=%m%n
log4j.additivity.gold_log=false log4j.logger.prop_log=INFO, prop_log
log4j.appender.prop_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.prop_log.Append=true
log4j.appender.prop_log.DatePattern='.'yyyy-MM-dd
log4j.appender.prop_log.File=../logs/prop_log/prop_log.log
log4j.appender.prop_log.Threshold=INFO
log4j.appender.prop_log.layout=org.apache.log4j.PatternLayout
log4j.appender.prop_log.layout.ConversionPattern=%m%n
log4j.additivity.prop_log=false log4j.logger.register_log=INFO, register_log
log4j.appender.register_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.register_log.Append=true
log4j.appender.register_log.DatePattern='.'yyyy-MM-dd
log4j.appender.register_log.File=../logs/register_log/register_log.log
log4j.appender.register_log.Threshold=INFO
log4j.appender.register_log.layout=org.apache.log4j.PatternLayout
log4j.appender.register_log.layout.ConversionPattern=%m%n
log4j.additivity.register_log=false log4j.logger.active_log=INFO, active_log
log4j.appender.active_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.active_log.Append=true
log4j.appender.active_log.DatePattern='.'yyyy-MM-dd
log4j.appender.active_log.File=../logs/active_log/active_log.log
log4j.appender.active_log.Threshold=INFO
log4j.appender.active_log.layout=org.apache.log4j.PatternLayout
log4j.appender.active_log.layout.ConversionPattern=%m%n
log4j.additivity.active_log=false log4j.logger.game_play_log=INFO, game_play_log
log4j.appender.game_play_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.game_play_log.Append=true
log4j.appender.game_play_log.DatePattern='.'yyyy-MM-dd
log4j.appender.game_play_log.File=../logs/game_play_log/game_play_log.log
log4j.appender.game_play_log.Threshold=INFO
log4j.appender.game_play_log.layout=org.apache.log4j.PatternLayout
log4j.appender.game_play_log.layout.ConversionPattern=%m%n
log4j.additivity.game_play_log=false log4j.logger.online_log=INFO, online_log
log4j.appender.online_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.online_log.Append=true
log4j.appender.online_log.DatePattern='.'yyyy-MM-dd
log4j.appender.online_log.File=../logs/online_log/online_log.log
log4j.appender.online_log.Threshold=INFO
log4j.appender.online_log.layout=org.apache.log4j.PatternLayout
log4j.appender.online_log.layout.ConversionPattern=%m%n
log4j.additivity.online_log=false
配置文件中有几个关键点:
1.log4j.logger.online_log=INF
<pre name="code" class="java">import java.util.List; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestObservable { Logger chargeLogger = LoggerFactory.getLogger("charge_log");
Logger goldLogger = LoggerFactory.getLogger("gold_log");
Logger propLogger = LoggerFactory.getLogger("prop_log");
Logger registerLogger = LoggerFactory.getLogger("register_log");
Logger activeLogger = LoggerFactory.getLogger("active_log");
Logger gamePlayLogger = LoggerFactory.getLogger("game_play_log");
Logger onlineLogger = LoggerFactory.getLogger("online_log"); public void setSource(List<?> objectList,LoggerType loggerType) throws Exception { if(objectList == null || objectList.isEmpty()) {
return;
} for(Object obj : objectList) { switch(loggerType) {
case CHARGE_LOG :
chargeLogger.info(obj.toString());
break;
case ACTIVE_ACCOUNT :
activeLogger.info(obj.toString());
break;
case GAME_PLAY :
gamePlayLogger.info(obj.toString());
break;
case GOLD_LOG :
goldLogger.info(obj.toString());
break;
case ONLINE_PLAYER :
onlineLogger.info(obj.toString());
break;
case PROP_LOG :
propLogger.info(obj.toString());
break;
case REGISTER_LOG :
registerLogger.info(obj.toString());
break;
default :
throw new Exception("Type not suitable.");
}
}
} public void setSource(Object obj,LoggerType loggerType) throws Exception { if(obj == null) {
return;
} switch(loggerType) {
case CHARGE_LOG :
chargeLogger.info(obj.toString());
break;
case ACTIVE_ACCOUNT :
activeLogger.info(obj.toString());
break;
case GAME_PLAY :
gamePlayLogger.info(obj.toString());
break;
case GOLD_LOG :
goldLogger.info(obj.toString());
break;
case ONLINE_PLAYER :
onlineLogger.info(obj.toString());
break;
case PROP_LOG :
propLogger.info(obj.toString());
break;
case REGISTER_LOG :
registerLogger.info(obj.toString());
break;
default :
throw new Exception("Type not suitable.");
}
} public static void main(String[] args) {
TestObservable abservable = new TestObservable();
try {
abservable.setSource("gole_log", LoggerType.GOLD_LOG);
abservable.setSource("charge_log", LoggerType.CHARGE_LOG);
abservable.setSource("active_log", LoggerType.ACTIVE_ACCOUNT);
abservable.setSource("game_play_log", LoggerType.GAME_PLAY);
abservable.setSource("online_player", LoggerType.ONLINE_PLAYER);
abservable.setSource("prop_log", LoggerType.PROP_LOG);
abservable.setSource("register_log", LoggerType.REGISTER_LOG);}
catch (Exception e) {
e.printStackTrace();}}}
} }
O, online_log
2.log4j.additivity.online_log=false
additivity的含义是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下 子Logger 会继承 父Logger 的appender,也就是说 子Logger 会在 父Logger 的appender里输出。若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。
ConversionPattern=%m%n 是我只输出我的内容加个换行。
java_log4j多文件配置的更多相关文章
- Tomcat下conf下server.xml的文件配置信息
Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server. ...
- H5+Mui文件配置 vue-resource基本使用方法
使用HBuilder空项目搭建h5原生开发框架需要的文件配置: *css:mui.min.css *fonts:mui.ttf mui-icon-extra.ttf *js:mui.js mui.mi ...
- django静态文件配置
开发环境配置 需要下面几个步骤 1. 在app目录下创建static目录,将静态文件和相关文件夹放到此目录下,如your_app/static/img等 2. 确保settings.py中的INSTA ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- php 上传大文件配置upload_max_filesize和post_max_size选项
php 上传大文件配置upload_max_filesize和post_max_size选项 (2014-04-29 14:42:11) 转载▼ 标签: php.ini upload _files[f ...
- Android通过xml文件配置数据库
之前一段时间自己封装了两个数据库,一个是ORM数据库,另一个是事件流数据库,项目相应的地址如下: ORM数据库:https://github.com/wenjiang/SimpleAndroidORM ...
- gradle init.gradle的文件配置 使用
init.gradle文件在build开始之前执行,所以你可以在这个文件配置一些你想预先加载的操作例如配置build日志输出.配置你的机器信息,比如jdk安装目录,配置在build时必须个人信息,比如 ...
- Spring、Spring MVC、MyBatis整合文件配置详解
原文 http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...
- 咱就入个门之NHibernate映射文件配置(二)
上一篇主要介绍了NHibernate映射文件的基础配置,这篇我们介绍下NHibernate的一对多及多对一配置(文中我直接使用双向关联,即一和多两端都配置,开发中可以只使用一端),同时略带介绍下NHi ...
随机推荐
- iOS开发常用输入校验
1.数字字符校验 #define NUMBERSPERIOD @"0123456789." - (BOOL)CheckInput:(NSString *)string { NSCh ...
- CSS Sprite的优缺点分析
目前大多数的开发人员对这个技术都有相当地掌握,也有很多关于它的教程和文章.几乎所有的文章中都宣称设计师和开发人员都应该使用 CSS sprite 来减少 HTTP 请求数,并且节省一些流量.这个技术被 ...
- homework03
代码实现真的是大问题……在第二次作业还没有真正实现的情况下只能写这么一篇博客来整理一下从各位大神那里看到的东西. 两个弱菜加起来同样是弱菜,所以我和我的小伙伴的配合就是悲剧的聚合. 首先,大家都说C# ...
- Hibernate关联关系之双向1—n
•双向 1-n 与双向 n-1 是完全相同的两种情形 •双向 1-n 需要在1的一端可以访问n的一端,反之依然. 测试实例代码: 实体类: package com.elgin.hibernate.nt ...
- Myeclipse 快捷键设置和自动提示设置
1.快捷键设置和调整 2.自动提示信息设置与调整
- linux@64 获取时间的性能评估
听人说gettimeofday 在64bit下有缓存,速度很快,测试下了,感觉不对啊.. #include <time.h> #include <sys/time.h> #in ...
- BestCoder Round #70 Jam's math problem(hdu 5615)
Problem Description Jam has a math problem. He just learned factorization. He is trying to factorize ...
- Win7关机出现关闭程序提示框
运行输入Gpedit.msc回车打开组策略,在左侧选计算机配置/管理模板/系统/关机选项,在右侧双击“关闭会阻止或取消关机的应用程序的自动终止功能”,在打开的提示框中选“已启用”,按确定即可.
- 关于 jquery cookie的用法
东钿微信公众平台新版上线 需要一个引导用户操作步骤.设置一个cookie师傅偶第一次访问此页面 .如果是则跳出用户引导,如果不是,正常显示. 一开始在百度了一段jquery cookie插件,也没仔细 ...
- '用Roslynpad做一个轻量级的C#编辑器'
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:'用Roslynpad做一个轻量级的C#编辑器'.