今天配置了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多文件配置的更多相关文章

  1. Tomcat下conf下server.xml的文件配置信息

    Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server. ...

  2. H5+Mui文件配置 vue-resource基本使用方法

    使用HBuilder空项目搭建h5原生开发框架需要的文件配置: *css:mui.min.css *fonts:mui.ttf mui-icon-extra.ttf *js:mui.js mui.mi ...

  3. django静态文件配置

    开发环境配置 需要下面几个步骤 1. 在app目录下创建static目录,将静态文件和相关文件夹放到此目录下,如your_app/static/img等 2. 确保settings.py中的INSTA ...

  4. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  5. 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 ...

  6. Android通过xml文件配置数据库

    之前一段时间自己封装了两个数据库,一个是ORM数据库,另一个是事件流数据库,项目相应的地址如下: ORM数据库:https://github.com/wenjiang/SimpleAndroidORM ...

  7. gradle init.gradle的文件配置 使用

    init.gradle文件在build开始之前执行,所以你可以在这个文件配置一些你想预先加载的操作例如配置build日志输出.配置你的机器信息,比如jdk安装目录,配置在build时必须个人信息,比如 ...

  8. Spring、Spring MVC、MyBatis整合文件配置详解

    原文  http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...

  9. 咱就入个门之NHibernate映射文件配置(二)

    上一篇主要介绍了NHibernate映射文件的基础配置,这篇我们介绍下NHibernate的一对多及多对一配置(文中我直接使用双向关联,即一和多两端都配置,开发中可以只使用一端),同时略带介绍下NHi ...

随机推荐

  1. Flume OG 与 Flume NG 的区别

    1.Flume OG:Flume original generation 即Flume 0.9.x版本    Flume NG:Flume next generation ,即Flume 1.x版本 ...

  2. CSS基础知识——选择器

    选择器 元素选择器# 文档元素为最基本的选择器 例子:div{属性:值}; 选择器分组 例子:h2,p{属性:值}; 表示符合这两种规则的元素设置相同的属性值 通配选择器 表示所有元素 类选择器 应用 ...

  3. flashback database 基本介绍一

    flashback database 整个架构包括一个进程recover writer (rvwr)后台进程,flashback database log 日志和flash recovery area ...

  4. python学习之self,cls,staticmethod,classmethod

    一.总体说明 python类里会出现这三个单词,self和cls都可以用别的单词代替,类的方法有三种, 一是通过def定义的 普通的一般的,需要至少传递一个参数,一般用self,这样的方法必须通过一个 ...

  5. BestCoder Round #76 解题报告

    DZY Loves Partition [思路] 贪心 [代码] #include <iostream> using namespace std; typedef long long ll ...

  6. Matlab中imshow()函数的使用

    imread() 返回的图像类型是uint8类型, 这时用imshow显示图像的时候, imshow会认为输入矩阵的范围在0-255, 如果imshow的参数为double类型的,那么imshow认为 ...

  7. Install_pygments

    安装Pygments语法高亮 On OS X Leopard, Snow Leopard 1 $ sudo easy_install Pygments Alternatively on OS X wi ...

  8. 实际例子描述和分析“猎豹抢票跨站推荐功能有票刷不到”的疑似bug

    前言 快过年了,又到了一年抢票时.今年douba和douma计划要带着doudou回姥姥家.昨天在家用抢票软件居然发现了一个bug,那就是在猎豹抢票中跨站推荐的车票几天里一直是没有,但是在12306手 ...

  9. 用C语言实现ipv4地址字符串是否合法

    用程序实现ipv4地址字符串是否合法,主要考察的是C字符串的操作. 搜索了下,网上没有特别好的实现,自己实现了下,见笑于大家,请指正. #include <stdio.h> #includ ...

  10. crontab 获取本机ip

    写了个shell获取ip的函数,如下 function GetLocalIP() { ifconfig | grep 'inet '| grep -v '127.0.0.1' | cut -d: -f ...