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";
}
}
}