log4j使用疑惑 用log4j输出日志文件。多线程运行时,每个线程的日志都写到一个文件中了,很混乱。有办法在运行时指定输出的文件名吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、配置log4j的配置文件#log4j.properties配置log4j.rootLogger=ALL, A1log4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=C:/log4j/TEST.loglog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.DatePattern='.'yyyy-MM-dd-HH-mmlog4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n2、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 stublogger.info("PIG");}} 这个方法好像可以。不过,有没有清晰明了的方法,直接设置logger?我用log4j主要就是在配置文件中控制输出等级,输出文件的位置想在程序里决定。 给你个例子把,希望能帮到你/* * 文 件 名: 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"; } }} 上面的方法是用JDK自带的logger类实现的,log4j无法实现你说的功能 swt/jface 树排序 [求助][求顶]求UDP传送大文件Demo,附上我的拆分代码. 解析excel问题,急急急.......... 初学struts的小问题,JSP中的代码如何用struts 分离开。。。。 解决马上给分。 awt 程序,点击关闭按钮无响应 课堂作业,请各位指导! 恳请各位高手帮忙,下周末前要交! 关于多线程的问题,为什么这个程序的增量为25,而不是1 jni 中,怎样将一个LONGLONG型的值传回到去呢??? PreparedStatement为什么使用不了参数? switch语句问题 筛选问题,只显示选中的
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?
我用log4j主要就是在配置文件中控制输出等级,
输出文件的位置想在程序里决定。
/*
* 文 件 名: 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";
}
}
}