社区
Java EE
帖子详情
log4j 如何输出信息到不同的文件
lovely_autumn
2009-11-09 05:21:32
今天在做项目时候,要用到log4j,我想把等级info输出到info.log的文件中,把等级为error的输出到error.log的文件中。
同时,我只要输出自己想要的东西。比如info:只要输出我想要的东西,而不是把hibernate里底层,包中的也输出来。这样看起来比较吃力。。
请高手指点指点。。。。。。。。。。。。。。。。。。。。。。。
...全文
421
4
打赏
收藏
log4j 如何输出信息到不同的文件
今天在做项目时候,要用到log4j,我想把等级info输出到info.log的文件中,把等级为error的输出到error.log的文件中。 同时,我只要输出自己想要的东西。比如info:只要输出我想要的东西,而不是把hibernate里底层,包中的也输出来。这样看起来比较吃力。。 请高手指点指点。。。。。。。。。。。。。。。。。。。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
铁匠梁
2009-11-09
打赏
举报
回复
找个log4j的配置大全看看,可以实现不同的包路径输出到不同的文件中。
sky_ccy
2009-11-09
打赏
举报
回复
下面是log4j.properties的内容
log4j.appender.MF=org.apache.log4j.MultiFileAppender //用我自己写的配饰器类来记录日志
log4j.appender.MF.maxBackupIndex=100000
log4j.appender.MF.maxFileSize=1MB
log4j.appender.MF.layout=org.apache.log4j.PatternLayout
log4j.appender.MF.layout.ConversionPattern=[%-5p] %d: %m%n
log4j.appender.MF.dir=D\:\\guojie1\\logs //存放日志的目录,呵呵
log4j.rootLogger=debug, MF
log4j.logger.sky_ccy=debug
sky_ccy
2009-11-09
打赏
举报
回复
以下是源码
package org.apache.log4j;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.log4j.spi.LoggingEvent;
/**
* 功能:用来设置日志的输出,将不同级别的日志(debug,warn,info,error,cons)输出到不同文件里
* @author sky_ccy
*
*/
public class MultiFileAppender extends AppenderSkeleton {
private final Map appenders = new HashMap();
//private final ReadWriteLock R_W_LOCK = new ReentrantReadWriteLock();
private final Layout layout = new PatternLayout("%d: %m%n");
// 存放log日志的根文件夹,根据自己的需要,可以自己进行修改
String baseLogPath = System.getProperty("user.dir");
private String dir = baseLogPath + File.separator + "guojielogs"; //定义了日志文件夹存放的位置
static int dirflg = 0; //判断文件夹是否已经存在的标志
static int infoflag = 0; //判断文件夹是否已经存在的标志
static int errorflag = 0; //判断文件夹是否已经存在的标志
static int warnflag = 0; //判断文件夹是否已经存在的标志
static int debugflag = 0; //判断文件夹是否已经存在的标志
static int console = 0;
private int maxBackupIndex = 0;
// 设置日志文件的大小
private String maxFileSize = "5MB";
public void setDir(String dir) {
this.dir = dir;
}
public void append(LoggingEvent event) {
Level l = event.getLevel();
String key = l.toString();
RollingFileAppender appender; //设置日志的写入模式为RollingFileAppender
if (dirflg == 0) {
File f1 = new File(dir);
if (!f1.exists()) {
f1.mkdir();
}
dirflg = 1;
}
//R_W_LOCK.readLock().lock();
try {
appender = (RollingFileAppender) appenders.get(key);
} finally {
//R_W_LOCK.readLock().unlock();
}
if (appender == null) {
//R_W_LOCK.writeLock().lock();
try {
appender = (RollingFileAppender) appenders.get(key);
if (appender == null) {
try {
// 判断日志的级别是否为info
if (key.toLowerCase().equals("info")) {
String path = ""; //log日志存放的路径
path = dir + File.separator + "info";
if (infoflag == 0) {
File f = new File(path);
if (!f.exists()) {
f.mkdir();
}
infoflag = 1;
}
// System.out.println(path);
appender = new RollingFileAppender(layout,
new File(path, key.toLowerCase() + ".log")
.getPath());
}
// 判断日志的级别是否为error
if (key.toLowerCase().equals("error")) {
// 设置log日志在父目录下的error文件夹中
/*-------
* 这里你也可以重定向error日志的输出路径
*/
String path = "";
path = dir + File.separator + "error";
if (errorflag == 0) {
//System.out.println("检查文件夹是否存在");
File f = new File(path);
if (!f.exists()) {
f.mkdir();
}
errorflag = 1;
}
// System.out.println(path);
appender = new RollingFileAppender(layout,
new File(path, key.toLowerCase() + ".log")
.getPath());
}
// 判断日志的级别是否为warn
if (key.toLowerCase().equals("warn")) {
// 设置log日志在父目录下的warn文件夹中
/*-------
* 这里你也可以重定向warn日志的输出路径
*/
String path = "";
path = dir + File.separator + "warn";
if (warnflag == 0) {
//System.out.println("检查文件夹是否存在");
File f = new File(path);
if (!f.exists()) {
f.mkdir();
}
warnflag = 1;
}
// System.out.println(path);
appender = new RollingFileAppender(layout,
new File(path, key.toLowerCase() + ".log")
.getPath());
}
// 判断日志的级别是否为debug
if (key.toLowerCase().equals("debug")) {
// 设置log日志在父目录下的debug文件夹中
/*-------
* 这里你也可以重定向debug日志的输出路径
*/
String path = "";
path = dir + File.separator + "debug";
if (debugflag == 0) {
//System.out.println("检查文件夹是否存在");
File f = new File(path);
if (!f.exists()) {
f.mkdir();
}
debugflag = 1;
}
appender = new RollingFileAppender(layout,
new File(path, key.toLowerCase() + ".log")
.getPath());
}
appender.setMaxFileSize(this.maxFileSize); //设置文件的大小
appender.setMaxBackupIndex(this.maxBackupIndex);
appenders.put(key, appender);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} finally {
//R_W_LOCK.writeLock().unlock();
}
}
appender.append(event);
}
public void setMaxBackupIndex(int maxBackups) {
this.maxBackupIndex = maxBackups;
}
/**
* 功能:设置log日志文件的大小
* @param maxFileSize
*/
public void setMaxFileSize(String maxFileSize) {
this.maxFileSize = maxFileSize;
}
/**
* 功能:关闭文件锁
*/
public void close() {
//R_W_LOCK.readLock().lock();
try {
Iterator it = appenders.values().iterator();
while (it.hasNext()) {
RollingFileAppender rf = (RollingFileAppender) it.next();
rf.close();
}
} finally {
//R_W_LOCK.readLock().unlock();
}
}
public boolean requiresLayout() {
return false;
}
}
sky_ccy
2009-11-09
打赏
举报
回复
呵呵,,我写过个程序,实现了这个写法
log4j
输出
日志到
不同
文件
1.先看
log4j
的配置
文件
log4j
.properties 没有此
文件
就在根目录下创建一个:
log4j
.rootLogger=INFO,R,Client
log4j
.appender.R=org.apache.
log4j
.RollingFileAppender
log4j
.appender.R.File=./log/server.log ...
log4j
输出
日志
信息
到
文件
中
Log4j
由三个重要的组件构成:日志
信息
的优先级,日志
信息
的...
log4j
.properties
输出
ERROR级别日志到控制台和
文件
中。
log4j
.rootLogger:指定日志级别和
输出
源,用逗号隔开。 org.apache.
log4j
.ConsoleAppender:指定
1.Slf4j使用
log4j
的配置参数、配置sl4j/
log4j
输出
到
不同
的
文件
、案例
1.Slf4j使用
log4j
的配置参数、配置sl4j/
log4j
输出
到
不同
的
文件
、案例
Log4j
输出
日志到单独日志
文件
正常情况下
log4j
的info日志会打印到统一的日志
文件
,当需要查看特定功能的执行情况,打印特定功能到指定日志
文件
,方法如下:
log4j
.properties### set log levels ###
log4j
.rootLogger = INFO , C , D , E ### ...
配置slf4j/
log4j
输出
到
不同
的
文件
在实际中,我们可能想要将
不同
类型的日志分类
输出
到
不同
的
文件
中。 关于
log4j
的配置参数解释可以参考: slf4j使用
log4j
的配置参数: https://blog.csdn.net/yx0628/article/details/83214387 下面举个例子,比如...
Java EE
67,512
社区成员
225,880
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章