log4j使用疑惑

chenxs_03 2012-12-24 04:22:13
用log4j输出日志文件。
多线程运行时,每个线程的日志都写到一个文件中了,很混乱。
有办法在运行时指定输出的文件名吗
...全文
212 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rome_wu 2013-01-04
  • 打赏
  • 举报
回复
上面的方法是用JDK自带的logger类实现的,log4j无法实现你说的功能
rome_wu 2013-01-04
  • 打赏
  • 举报
回复
给你个例子把,希望能帮到你 /* * 文 件 名: 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"; } } }
lvbamm 2013-01-04
  • 打赏
  • 举报
回复
新手同问。。
chenxs_03 2012-12-24
  • 打赏
  • 举报
回复
引用 3 楼 abcmsnet 的回复:
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……
这个方法好像还是有问题。 这里只是改了唯一的输出文件的名字。 多线程运行时,就是最后一个启动的线程决定的输出文件名。 实际上并不是每个线程输出到各自的文件中去。
chenxs_03 2012-12-24
  • 打赏
  • 举报
回复
引用 3 楼 abcmsnet 的回复:
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……
这个方法好像可以。 不过,有没有清晰明了的方法,直接设置logger? 我用log4j主要就是在配置文件中控制输出等级, 输出文件的位置想在程序里决定。
  • 打赏
  • 举报
回复
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"); } }
chenxs_03 2012-12-24
  • 打赏
  • 举报
回复
引用 1 楼 qq657317381 的回复:
oo神奇阿 厉害阿阿阿
什么乱七八糟的?
qq657317381 2012-12-24
  • 打赏
  • 举报
回复
oo神奇阿 厉害阿阿阿

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧