首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

log4j运用疑惑

2013-01-17 
log4j使用疑惑用log4j输出日志文件。多线程运行时,每个线程的日志都写到一个文件中了,很混乱。有办法在运行

log4j使用疑惑
用log4j输出日志文件。
多线程运行时,每个线程的日志都写到一个文件中了,很混乱。
有办法在运行时指定输出的文件名吗
[解决办法]
oo神奇阿 厉害阿阿阿
[解决办法]
1、配置log4j的配置文件

#log4j.properties配置

log4j.rootLogger=ALL, A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/TEST.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n


2、java中重新设置输出文件

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Logger;

public class SetLogFileName {
 public SetLogFileName(String filename){
DailyRollingFileAppender appender = (DailyRollingFileAppender)Logger.getRootLogger().getAppender("A1");
appender.setFile( "c:/log4j/"+filename+".log");//动态地修改这个文件名 
appender.activateOptions();
 }
}

3、调用log4j输出文件

import org.apache.log4j.Logger;

public class OutPutLog {
static Logger logger = Logger.getLogger(OutPutLog.class);
/**
* @param args
*/
public static void main(String[] args) {
SetLogFileName D = new SetLogFileName("trust");
// TODO Auto-generated method stub
logger.info("PIG");

}


}
[解决办法]
新手同问。。
[解决办法]
给你个例子把,希望能帮到你


/*
 * 文 件 名:  Logger.java
 * 版    权:  
 * 描    述:  <描述>
 * 修 改 人:  
 * 修改时间:  2012-12-25
 * 修改内容:  <修改内容>
 */
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import cn.com.newdt.travelitinerary.vo.LogType;
/**
 * <日志控制类>
 * <完成日志输出>
 * 
 * @author  
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 * 日志输出到服务器D盘''文件夹下,
 * 并且根据系统日期每天都会生成对应的终端日志文件
 *
 */
public class  LoggerUtil{


/** 存放的文件夹 **/
    private static String file_name = "日志";
    
    /**
     * 得到要记录的日志的路径及文件名称
     * @return
     */
    private static String getLogName(String terminalNo,String type) {
        StringBuffer logPath = new StringBuffer();
        logPath.append("D:\"+file_name);
        File file = new File(logPath.toString());
        if (!file.exists())


            file.mkdir();
        logPath.append("\"+terminalNo);
        file = new File(logPath.toString());
        if (!file.exists())
            file.mkdir();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        logPath.append("\"+sdf.format(new Date())+"");
        file = new File(logPath.toString());
        if (!file.exists())
            file.mkdir();
        logPath.append("\"+type+".log");
        return logPath.toString();
    }
    
    /**
     * 配置Logger对象输出日志文件路径
     * @param logger 
     * @throws SecurityException
     * @throws IOException
     */
    public static void setLogingProperties(Logger logger,String terminalNo,String type,String info) throws SecurityException, IOException {
        setLogingProperties(logger,Level.ALL,terminalNo,type,info);
    }
    
    /**
     * 配置Logger对象输出日志文件路径
     * @param logger
     * @param level 在日志文件中输出level级别以上的信息
     * @throws SecurityException
     * @throws IOException
     */
    public static void setLogingProperties(Logger logger,Level level,String terminalNo,String type,String info) {
        try {
        FileHandler fh = new FileHandler(getLogName(terminalNo,type),true);
            logger.addHandler(fh);//日志输出文件
            //logger.setLevel(level);
            fh.setFormatter(new SimpleFormatter());//输出格式
            //logger.addHandler(new ConsoleHandler());//输出到控制台
            logger.info(info);
            fh.close();
        } catch (SecurityException e) {
            logger.log(Level.SEVERE, "安全性错误", e);
        } catch (IOException e) {
            logger.log(Level.SEVERE,"读取文件日志错误", e);
        }
    }
    
    public static Logger getLogger(String name,String terminalNo,String info){


    Logger logger = Logger.getLogger(name);
    try {
LoggerUtil.setLogingProperties(logger,terminalNo,name,info);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return logger;
    
    }
    
    public static void main(String [] args) {
    String terminalNo = "GZHCAN0004";//相当于一个线程
LogType type =LogType.valueOf("EPP");
        Logger logger = LoggerUtil.getLogger(type.toString(),terminalNo,"..........");
        
    }
}


-------------------------------------------
public enum LogType {
           
APP, NET, RECEIPTPRINTER, READCARD, EPP, IDCARD, RECHARGECARD, SAFEDOOR, SERVICE, allLog;

public String toString() {
switch (this) {
case APP:
return "APP";
case NET:
return "NET";
case RECEIPTPRINTER:
return "RECEIPTPRINTER";
case READCARD:
return "READCARD";
case EPP:
return "EPP";
case IDCARD:
return "IDCARD";
case RECHARGECARD:
return "RECHARGECARD";
case SAFEDOOR:
return "SAFEDOOR";
case SERVICE:
return "SERVICE";
case allLog:
return "allLog";
default:
return "APP";
}
}
}

热点排行