Short introductioin for Log4j:
http://logging.apache.org/log4j/1.2/manual.html
官方文档,非常不错。不过没有解决我的问题。
一个关于log4j配置文件的说明,可惜太简单了:
http://wiki.apache.org/logging-log4j/Log4jXmlFormat
现在的现象就是没有log输出,真郁闷。
Four points:
1,reflect
<appender name="console" class="org.apache.log4j.ConsoleAppender">
2,Log4j工厂模式
Logger projectLogger = Logger.getLogger(KillScript.class);
projectLogger.addAppender(new ConsoleAppender(new PatternLayout("%m%n")));
Log log = new Log4JLogger(projectLogger);
--不理解。直接用projectLogger.info就已经可以添加日志了啊。
难道就是为了增加isDebugable之类的??
3,Log4j的配置文件。
<appender name="rootlogfile_arch" class="com.***.logging.ArchiveRollingFileAppender">
<param name="LogDirPath" value="log"/>
<param name="LogFileName" value="**.log"/>
<param name="LogArchiveDirName" value="archive/log"/>
<param name="LogArchivePattern" value="yyyy-MM-dd_HH-mm-ss"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupCount" value="1000"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="(%-22d{MMM dd, yyyy, HH:mm:ss}), %p, [%t] %C, %m%n"/>
</layout>
<filter class="com.***.ClassNameFilter"> --这个filter到底什么用啊,真要命!
<param name="classNames">
<list>
<value>com.***</value>
<value>com.***</value>
<value>com.***</value>
</list>
</param>
</filter>
</appender>
com.***.ClassNameFilter这个类就是定义了一个class name List,返回了一个int means loggingEvent ture or false.
从现象上看,加了filter以后这些类都不输出log了。
4, appender是observer pattern。
没有看源代码但是想想就是这样的。
那个。。。最后明白是因为在main里没有读log4j的配置文件。所以里面配置的什么root logger都没有起作用。
这东西还得自己去读,真次!
控制台输出是因为有这么一句:
consoleLogger.addAppender(new ConsoleAppender(new PatternLayout("%m%n")));
要读配置文件得这样:
File log4jConfigFile = new File(getConfigFolder(), LOG4J_CONFIG_FILE_NAME);
if (log4jConfigFile.exists()) {
try {
DOMConfigurator.configure(log4jConfigFile.getCanonicalPath());
} catch (FactoryConfigurationError e) {
err.println("Could read logging configuration file " + log4jConfigFile.getAbsolutePath() + ", "
+ e.getMessage());
return false;
} catch (IOException e) {
err.println("Could read logging configuration file " + log4jConfigFile.getAbsolutePath() + ", "
+ e.getMessage());
return false;
}
} else {
err.println("Could not find logging configuration file " + log4jConfigFile.getAbsolutePath());
return false;
}
必须继续了解log4j,现在了解的程度太少,连别人是怎么用的都不太明白。
我的to do list太长了。。。
org.apache.log4j.Level
org.apache.log4j.Filter