再次提醒,这不是一个web项目,既没有tomcat,也没有apache!所以拜托大家不要胡乱说!
以下是工程信息: IDE:Jbuilder2006,一个src文件夹,一个classes文件夹。
工程:Swing桌面项目,没有任何web应用,也没有任何网络功能,只是单纯的桌面看图软件工程!
JDK:1.6.0_20
错误信息:每次启动工程的时候,总是报log4j:WARN No appenders could be found for logger
或者log4j:WARN Please initialize the log4j system properly. 我在网上查了,说这是因为log4j没有配置好的缘故,可是网上的信息都是基于web应用的,在本项目中起不到
任何参考作用。 如果我想在这个工程下正常使用log4j,该如何配置?还有,我想将日志文件输出到指定位置,比如D:\Tools\log\info.log,按照以下内容书写的log4j.properties可以做到吗? log4j.rootLogger=INFO, A1 log4j.appender.ROOT.File=D:\\Tools\\log\\info.log log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-5p(%t) %-30c %x - %m%n
以下是工程信息: IDE:Jbuilder2006,一个src文件夹,一个classes文件夹。
工程:Swing桌面项目,没有任何web应用,也没有任何网络功能,只是单纯的桌面看图软件工程!
JDK:1.6.0_20
错误信息:每次启动工程的时候,总是报log4j:WARN No appenders could be found for logger
或者log4j:WARN Please initialize the log4j system properly. 我在网上查了,说这是因为log4j没有配置好的缘故,可是网上的信息都是基于web应用的,在本项目中起不到
任何参考作用。 如果我想在这个工程下正常使用log4j,该如何配置?还有,我想将日志文件输出到指定位置,比如D:\Tools\log\info.log,按照以下内容书写的log4j.properties可以做到吗? log4j.rootLogger=INFO, A1 log4j.appender.ROOT.File=D:\\Tools\\log\\info.log log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-5p(%t) %-30c %x - %m%n
再
Properties props = new Properties()
props.load(configStream)
PropertyConfigurator.configure(props)具体看log4j的api
log4j.rootCategory=INFO,dailyFile
log4j.appender.dailyFile.File=xxxxx.log
log4j.appender.dailyFile.layout.ConversionPattern=%d{M/d/yyyy HH:mm} %c %p - %m%n
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
不用手动加载,log4j.xml 会被自动加载。log4j 最先加载 log4j.xml 再次是 log4j.properties
不过,你这个并非WEB工程的话,你可以把 Logger写成静态的变量,
楼主你想要实现日志输入 文件,要改一下你的配置
log4j.appender.A1=org.apache.log4j.ConsoleAppender
这一句要改成
log4j.appender.A1=org.apache.log4j.FileAppender
才可以日志写文件
log4j.appender.A1=org.apache.log4j.ConsoleAppender
中的ConsoleAppender 是控制台输出的,就是将日志在控制台打印出来 ,不会写文件
其他的配置没看出什么问题你可以这样先测试一下 Logger logger = Logger.getLogger(Object.class);
logger.info(new Exception("test log4j"));
还有就是 log4j.appender.ROOT.File=D:\\Tools\\log\\info.log
这一句中的,ROOT 我不太确定可不可以,如果不可以的话,换成A1 肯定没问题
对不起,我前面还是忘了一句,这个工程所有使用到的jar,都是放在与src、classes同级的目录lib下的,在工程的属性设置中,Required Libraries中的所有library都来自于这个文件夹,并没有用jbuilder进行导入,而且,工程中也没有log4j.xml这个文件。这种情况下,该怎么办?是建立一个log4j.xml,然后把他放在lib目录下吗?
1、在src下创建log4j.xml文件(具体的日志配置文件在该文件中配置)
2、在src下创建Log.java文件
3、在需要日志的类先实例上面创建的Log.java类:
private Log log = new Log(CurrentClassName.class);
4、在需要日志的类中引用日志:
log.info("info级别日志添加");
============源码:==================
一、log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- 控制台System.out -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
</layout>
</appender> <!-- 把DEBUG信息输出到日志文件 --><!-- <appender name="DEBUG"-->
<!-- class="org.apache.log4j.DailyRollingFileAppender">-->
<!-- <param name="File" value="d:/log/debug.log" />-->
<!-- <param name="Append" value="true" />-->
<!-- <param name="DatePattern" value="'.'yyyy-MM-dd" />-->
<!-- <layout class="org.apache.log4j.PatternLayout">-->
<!-- <param name="ConversionPattern"-->
<!-- value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />-->
<!-- </layout>-->
<!-- <filter class="org.apache.log4j.varia.LevelRangeFilter">-->
<!-- <param name="LevelMin" value="DEBUG" />-->
<!-- <param name="LevelMax" value="DEBUG" />-->
<!-- </filter>-->
<!-- </appender>--> <!-- 把INFO信息输出到日志文件 --> <appender name="INFO"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="d:/log/info.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender> <!-- 把WARN信息输出到日志文件 --><!-- <appender name="WARN"-->
<!-- class="org.apache.log4j.DailyRollingFileAppender">-->
<!-- <param name="File" value="d:/log/warn.log" />-->
<!-- <param name="Append" value="true" />-->
<!-- <param name="DatePattern" value="'.'yyyy-MM-dd" />-->
<!-- <layout class="org.apache.log4j.PatternLayout">-->
<!-- <param name="ConversionPattern"-->
<!-- value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />-->
<!-- </layout>-->
<!-- <filter class="org.apache.log4j.varia.LevelRangeFilter">-->
<!-- <param name="LevelMin" value="WARN" />-->
<!-- <param name="LevelMax" value="WARN" />-->
<!-- </filter>-->
<!-- </appender>--> <!-- 把ERROR信息输出到日志文件 --> <appender name="ERROR"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="d:/log/error.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 把INFO信息输出到数据库中 -->
<!-- appender name="INFOJDBC"
class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&characterEncoding=GBK" />
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="user" value="root" />
<param name="password" value="" />
<param name="sql" value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />
</appender --> <!-- 把WARN信息输出到数据库中 --> <!--
<appender name="WARNJDBC"
class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL"
value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&characterEncoding=GBK" />
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="user" value="root" />
<param name="password" value="" />
<param name="sql"
value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />
</appender>
-->
<!-- 把ERROR信息输出到数据库中 -->
<!--
<appender name="ERRORJDBC"
class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL"
value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&characterEncoding=GBK" />
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="user" value="root" />
<param name="password" value="" />
<param name="sql"
value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />
</appender>
-->
<root>
<priority value="info" />
<appender-ref ref="STDOUT" />
<!--
<appender-ref ref="DEBUGConsole" />
<appender-ref ref="INFOConsole" />
<appender-ref ref="WARNConsole" />
<appender-ref ref="ERRORConsole" />-->
<!-- <appender-ref ref="DEBUG" />-->
<appender-ref ref="INFO" />
<!-- <appender-ref ref="WARN" />-->
<appender-ref ref="ERROR" />
<!--appender-ref ref="INFOJDBC" /-->
<!--<appender-ref ref="WARNJDBC" /> -->
<!-- <appender-ref ref="ERRORJDBC" />-->
</root></log4j:configuration>
二、Log.java
import org.apache.log4j.Logger;public class Log {
private Logger log;
public Log(Class c){
log = Logger.getLogger(c);
}
public void debug(String message) {
log.debug(message);
}
public void info(String message) {
log.info(message);
}
public void error(String message) {
log.error(message);
}
public void warn(String message) {
log.warn(message);
}
}
log4j:WARN Are you using FileAppender instead of ConsoleAppender?
log4j:ERROR No output stream or file set for the appender named [A1].
补充一句,改成FileAppender以后,才会出现刚才所说的错误信息,如果使用ConsoleAppender就没有了。
log4j:WARN File option not set for appender [A1].
log4j:WARN Are you using FileAppender instead of ConsoleAppender?
log4j:ERROR No output stream or file set for the appender named [A1].
你看看我先在的文件设置有问题吗:
log4j.rootLogger=INFO, A1log4j.appender.A1=D:/Tools/log/info.log# A1 is set to be a ConsoleAppender.
#log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1=org.apache.log4j.FileAppender# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p(%t) %-30c %x - %m%n
这一句 错了应该是
log4j.appender.A1.file=D:/Tools/log/info.log
楼主你理解错了,我说的 这里ROOT不行,是把root改成A1,修改后结果应该为
log4j.appender.A1.File=D:\\Tools\\log\\info.log
而不是把 ROOT.File 替换成 A1