log4j 不同模块输出到不同的文件
1、实现目标
不同业务的日志信息需要打印到不同的文件中,每天或者每个小时生成一个文件。如,注册的信息打印到register.log,每天凌晨生成一个register-年月日.log文件, 登录信息的日志打印到一个login.log文件中,login-年月日.log。
整体架构:

2、maven配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>test</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
</dependency> </dependencies> </project>
3、配置文件
默认情况下,log4j会解析src/main/resources/log4j.properties文件,下面是log4.properties文件中的内容####父级Loggerlog4j.rootCategory=info,stdout
### 子Logger是否会中父级Logger(上面设置的log4j.rootCategory)的appender里面输出,默认是true
### 为true时:子级别的Logger输出后还会在父级Logger里面输出
### 为false时:log日志只会在当前级别的Logger里面输出,不会在父级Logger里面输出
log4j.addivity.org.apache=true logdir=/Users/zhengcanrui/WORK/test/logs log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\:%d{yyyyMMdd HH\:mm\:ss} %c\: %m%n #########自定义日志输出########## log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${logdir}/file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n ##register模块输出
#### 用来控制过来日志信息,如:下面至少是INFO的信息才会输出到register文件中
log4j.logger.register=INFO,register
log4j.appender.register=org.apache.log4j.DailyRollingFileAppender
log4j.appender.register.File=${logdir}/register.log
log4j.appender.register.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.register.layout=org.apache.log4j.PatternLayout
log4j.appender.register.layout.ConversionPattern=%d %p [%c %L %l] - %m%n
log4j.additivity.register=true ##login模块输出
#INFO及以上几倍的log进行输出
log4j.logger.login=INFO,login
#以文件类型输出
log4j.appender.login=org.apache.log4j.DailyRollingFileAppender
#输出路径
log4j.appender.login.File=${logdir}/login.log
#配置文件输出的文件命名,这种格式文件会在凌晨生成一个文件,想在其他时间生成新文件可以查看DatePattern的相关配置
log4j.appender.login.DatePattern='_'yyyy-MM-dd'.log'
#输出格式
log4j.appender.login.layout=org.apache.log4j.PatternLayout
log4j.appender.login.layout.ConversionPattern=%d %p [%c] - %m%n
# 设置这个子Logger输出日志不在父级别logger里面输出
log4j.additivity.login=false
# 开源库的日志输出控制
# logger for spring
log4j.logger.org.springframework=error # logger for MemCached
log4j.logger.com.danga.MemCached=error # logger for c3p0
log4j.logger.com.mchange=error org.apache.commons.httpclient=error org.apache.http=error
几个需要注意的属性:
log4j.additivity-模块名:设置子logger是否在父级Logger中输出。
模块名的命名:log4j.appender.模块名.属性。
配置文件中的各个属性意义,可以查看: http://www.cnblogs.com/0201zcr/p/4761505.html
4、测试类
import org.apache.log4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by zhengcanrui on 16/7/27.
*/
public class LoggerUtil { private static final Logger file = Logger.getLogger("file");
private static final Logger register = Logger.getLogger("register");
private static final Logger login = Logger.getLogger("login");
private static final Logger goldcoin = Logger.getLogger("goldcoin");
private static final Logger recharge = Logger.getLogger("recharge");
private static final Logger jjj = Logger.getLogger(LoggerUtil.class.getName());
private static final Logger FILE = Logger.getLogger("appender1");
private static org.apache.log4j.Logger log = Logger.getLogger(LoggerUtil.class);
public static void logInfo(String log) {
file.info(log);
} public static void registerInfo() {
register.info("[register] ddd " );
} public static void loginInfo() {
login.info("[login] 222" );
} public static void main(String[] args) {
/*logInfo("11");
registerInfo();
loginInfo();*/
/*login.info("[login] 大大大大大大大大");
register.debug("2222");
register.info("[register] 人人人人人人人人人人");*/ //jjj.info("test");
//log.info(222);
FILE.info("334343");
register.info("2222");
}
}
结果:
1)控制台
INFO:20160801 12:27:57 appender1: 334343
INFO:20160801 12:27:57 register: 2222
2)生成文件

3)文件中内容

致谢:感谢您的阅读!
log4j 不同模块输出到不同的文件的更多相关文章
- Log4j按级别输出日志到不同文件配置
1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.commo ...
- Log4j按级别输出日志到不同文件配置分析 (转:projava)
关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...
- Log4j按级别输出日志到不同文件配置分析
关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...
- log4j将日志输出到控制台,文件,邮件
#将日志写到文件 log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=e\:\ ...
- Log4j将不同Package的日志输出到不同的文件的方法
随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志.对外发送消息的日志: 后台常驻线程 ...
- Log4j将不同Package的日志输出到不同的文件
转自:http://www.crazyant.net/1931.html 随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就 ...
- log4j分离日志输出 自定义过滤 自定义日志文件
普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...
- Log4j按级别输出到不同文件
log4j.properties 文件: log4j.logger.net.sf.hibernate.cache=debug log4j.rootLogger = error,portal_log,s ...
- android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...
随机推荐
- 你真的了解DOM事件么?
你真的了解DOM事件么? 我们大家都知道,人与人之间的交流可以通过语言,文字,肢体动作,面部微表情等,但是你知道Javascript和HTML之间是通过什么进行交互的么?你又知道Javascript和 ...
- Andriod小项目——在线音乐播放器
转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...
- Eclipse导入项目出现红色叹号的解决方法
情景: 我在另一台电脑开发Java Web项目,开发环境为 JDK 1.7,Tomcat v7.0,然后导入另一台电脑上,开发环境为为 JDK 1.8,Tomcat v8.0. 问题: 导入项目出现红 ...
- hdu-2063-二分图最大匹配
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- Professional JavaScript for Web Developers 3rd Edition ---读书笔记
1. DOMContentLoaded DOM树构建完成时触发该事件 load 页面加载完毕触发 原生js document.addEventListener('DOMContentLoaded', ...
- androidstudio报错
今天换一下IDE,结果上来就给我报错, androidstudio message:Error:java.lang.UnsupportedClassVersionError: com/android/ ...
- spring入门(四)【面向切面编程】
开发过程中很多时候会用到日志.事务等操作,这些操作如果要写在业务代码中会相当麻烦,这时就会用到面向切面编程(AOP),AOP作为一种编程思想,和OOP有着不同的侧重点,面向对象侧重于万事万物皆对象,而 ...
- 从零开始学 Java - Spring AOP 实现用户权限验证
每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...
- 从零开始学 Java - Windows 下安装 JDK
关于未来 "我要死在火星.在我死去的时候能够想着人类能有一个美好的未来--有可持续的能源,同时能够殖民其他的星球来避免人类灭绝的最坏可能." 官网下载 直接打开官网:http:// ...