日志框架初探
1. 常见的日志框架
-
JCL: JDK自带的日志记录器!不需要引入第三方框架!可以直接使用!
java.util.logger
- log4j: 早期比较流行的日志框架!
- slf4j: 日志门面技术! 类似JDBC,一种日志记录的标准! 代码中采用了此标准记录日志后!
只需要在项目中,替换不同实现了次标准的日志框架,即可,无需重构代码!
- log4j2: 目前最牛的日志框架!
- logback: 是log4j的升级版!对log4j性能好!
2. Log4j
2.1 配置文件的名称
必须有配置文件!
public class LogManager {
/**
* @deprecated This variable is for internal use only. It will
* become package protected in future versions.
* */
static public final String DEFAULT_CONFIGURATION_FILE = "log4j.properties";
static final String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml";
Log4j的配置我必须要么为 log4j.properties,要么是 log4j.xml
2.2 配置文件怎么写
三大组件:
Logger: 日志记录器! 日志记录的最高领导! 需要调用Logger对象进行日志的记录!
# 为所有类创建一个rootLogger,log4j.rootLogger=INFO, stdout
# log4j.rootLogger=日志记录级别, appender1,appender2...
TRACE,DEBUG,INFO,WARN,ERROR
log4j.rootLogger=INFO, stdout
#为指定的类创建logger,按照指定的方法来记录日志
log4j.logger.在哪个类上记录日志的全类名=日志记录级别, appender1,appender2...
Appender: 决定记录的日志记录到哪里?如何去记录?
# log4j.appender固定的前缀
log4j.appender.自定义名称= appender类的全类名,必须是 org.apache.log4j.Appender类型
# 是指定的Appender类中的 setXxx()中的Xxx OGNL表达式
log4j.appender.自定义名称.Xxx
Layout: 记录的日志的样式
2.3 示例
#logger log4j.rootLogger是固定的,代表为当前应用程序的所有类都采取以下日志记录
log4j.rootLogger=INFO, stdout
#appender 名称叫stdout
log4j.appender.a=org.apache.log4j.ConsoleAppender
# setTarget
log4j.appender.a.target=System.err
# ConsoleAppender.setLayout
log4j.appender.a.layout=org.apache.log4j.PatternLayout
#org.apache.log4j.PatternLayout.setConversionPattern
log4j.appender.a.layout.ConversionPattern=%d %p [%c] - %m%n
#appender 名称叫 logfile
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
配置文件中有些东西是固定的!固定编写的参考
public class PropertyConfigurator implements Configurator {
/**
Used internally to keep track of configured appenders.
*/
protected Hashtable registry = new Hashtable(11);
private LoggerRepository repository;
protected LoggerFactory loggerFactory = new DefaultCategoryFactory();
static final String CATEGORY_PREFIX = "log4j.category.";
static final String LOGGER_PREFIX = "log4j.logger.";
static final String FACTORY_PREFIX = "log4j.factory";
static final String ADDITIVITY_PREFIX = "log4j.additivity.";
static final String ROOT_CATEGORY_PREFIX = "log4j.rootCategory";
static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";
static final String APPENDER_PREFIX = "log4j.appender.";
static final String RENDERER_PREFIX = "log4j.renderer.";
static final String THRESHOLD_PREFIX = "log4j.threshold";
private static final String THROWABLE_RENDERER_PREFIX = "log4j.throwableRenderer";
private static final String LOGGER_REF = "logger-ref";
private static final String ROOT_REF = "root-ref";
private static final String APPENDER_REF_TAG = "appender-ref";