java项目用log4j写日志,但无法写进log文件,帮忙看一下吧!

ForestGumpSilly 2011-08-25 10:42:28
网上有关java的Log4j写日志大多是web开发,但是我要在一个纯java工程(非web)中写日志。我在网上看到一个例子:
http://blog.csdn.net/tower888/article/details/6452699

我试着用了一下,发现只能在Console写日志,在log4j.properties中配置了很久也没成功在指定的文件中写日志。
我希望在指定位置创建一个log文件,把日志写进去,但就是实现不了。请各位帮我找找原因,谢谢!

这是我的代码,我写了三个java文件,一个log4j.properties,引入了两个jar包:log4j和apache.org.common.logging

1、Log4jConfig类:是用于配置log4j.properties的位置的。

package testLog;
import org.apache.log4j.PropertyConfigurator;

public class Log4jConfig {
private static boolean isReload = true;
public static void load() {
String path = Log4jConfig.class.getClass().getResource("/")
.getPath()
+ "testLog/log4j.properties";
//String path="config/log4j.properties";
System.out.println("log4j configfile path=" + path);
PropertyConfigurator.configureAndWatch(path,1000);
}

private static void reload() {
if (isReload) {
load();
}
isReload = false;
}

public void setReload(boolean flag) {
isReload = flag;
}

}


2、Logger类,用于写日志的。
package testLog;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Logger {
private Log log = null;
static{
Log4jConfig.load();//装载log4j配置文件
}
private Logger() {
log = LogFactory.getLog(this.getClass());
}

private Logger(Class c) {
log = LogFactory.getLog(c);
}

private Logger(String className) {
log = LogFactory.getLog(className);
}

public static Logger getLogger() {
return new Logger();
}

public static Logger getLogger(Class c) {

return new Logger(c);
}

public static Logger getLogger(String className) {
return new Logger(className);
}

public void trace(String info) {
if (log.isTraceEnabled())
log.trace(info);
}

public void debug(String info) {
if (log.isDebugEnabled())
log.debug(info);
}

public void info(String info) {
if (log.isInfoEnabled())
log.info(info);
}

public void warn(String info) {
if (log.isWarnEnabled())
log.warn(info);
}

public void error(String info) {
if (log.isErrorEnabled())
log.error(info);
}

public void fatal(String info) {
if (log.isFatalEnabled())
log.fatal(info);
}

public boolean isTraceEnabled() {
return log.isTraceEnabled();
}

public boolean isDebugEnabled() {
return log.isDebugEnabled();
}

public boolean isInfoEnabled() {
return log.isInfoEnabled();
}

public boolean isWarnEnabled() {
return log.isWarnEnabled();
}

public boolean isErrorEnabled() {
return log.isErrorEnabled();
}

public boolean isFatalEnabled() {
return log.isFatalEnabled();
}
}


3、log4j.properties,用于配置的,是我用添加普通文件的方式创建的。
其实不用写这么多,但是用了这么多配置语句都不起作用啊!

log_home=../log
log4j.rootLogger=file,Console

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=C:\gwlog.log
log4j.appender.logfile.DatePattern=.yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n

### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=D:\\log.txt
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%d{yyyyMMdd-HH:mm:ss}-%p][%F:%L] %m%n

log4j.appender.DailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyFile.Threshold = info
#log4j.appender.DailyFile.File=${log_home}/test.log
log4j.appender.DailyFile.File=C:\\gwlog.log
log4j.appender.DailyFile.encoding=gbk
log4j.appender.DailyFile.Append=true
log4j.appender.DailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.DailyFile.layout.ConversionPattern=[%d{yyyyMMdd-HH:mm:ss}-%p][%F:%L] %m%n

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=C:\gwlog.log
log4j.appender.logfile.DatePattern=.yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n


4、TestLog,测试类。

package testLog;

public class TestLog {

static Logger log=Logger.getLogger(TestLog.class);

public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
log.info("----------info");
log.debug("----------debug");
log.error("----------error");

System.out.println("***********************");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}


请各位告诉我,我到底哪里错了,或者给我一个可以写日志在指定log文件中的java工程的实例,网址也可以。谢谢了!
...全文
1680 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestGumpSilly 2011-08-27
  • 打赏
  • 举报
回复
后来我自己也发现了,要把log4j.properties建立到src下,包下别放,这样就可以了。
softroad 2011-08-26
  • 打赏
  • 举报
回复
DailyRollingFileAppender
当天的日志xx没有.log后缀,第二天才能看到第一天的xx.log文件
softroad 2011-08-26
  • 打赏
  • 举报
回复
log4j.appender.logfile.File=C:\gw
log4j.appender.logfile.DatePattern='yyyy-MM-dd'.log



你写了2个logfile
wula0010 2011-08-26
  • 打赏
  • 举报
回复
应该是在默认包下建立log4j.properties文件,不要尝试把这个文件放到其他地方,那样是可以,但是使用的时候及其不便,..........
wula0010 2011-08-26
  • 打赏
  • 举报
回复
不知道你搞这么多东西干什么,建立java项目,
在默认包下见log4j.文件:
log4j.rootLogger=info,file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=d:/logs/idslog_timing.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %c,%M,%F,%L %p - %m%n

建立文件:
package log4jtest;
import org.apache.log4j.Logger;

/**
*
* @author 潘天柱
*/
public class Main {
static Logger logger = Logger.getLogger(Main.class);
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
logger.info("----------info");
logger.debug("----------debug");
logger.error("----------error");

// TODO code application logic here
}

}

这样就可以输出log日志了,

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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