Java 使用ConfigurationFactory以编程方式配置log4j2
我试图仅通过使用和引用来配置和设置Log4j2。我使用的代码如下所示:Java 使用ConfigurationFactory以编程方式配置log4j2,java,logging,log4j2,Java,Logging,Log4j2,我试图仅通过使用和引用来配置和设置Log4j2。我使用的代码如下所示: public class LoggingConfiguration { public static final String PATTERN_LAYOUT = "[%d] [%t] [%-5level] - %msg (%logger{1}:%L) %n%throwable"; public static final String LOG_FILE_NAME = "app.log"; public
public class LoggingConfiguration {
public static final String PATTERN_LAYOUT = "[%d] [%t] [%-5level] - %msg (%logger{1}:%L) %n%throwable";
public static final String LOG_FILE_NAME = "app.log";
public static final String LOG_FILE_NAME_PATTERN = LOG_FILE_NAME + "-yyyy.MM.dd";
static {
ConfigurationFactory.setConfigurationFactory(new Log4j2ConfigurationFactory());
}
/**
* Just to make JVM visit this class to initialize the static parts.
*/
public static void configure() {
}
@Plugin(category = "ConfigurationFactory", name = "Log4j2ConfigurationFactory")
@Order(0)
public static class Log4j2ConfigurationFactory extends ConfigurationFactory {
@Override
protected String[] getSupportedTypes() {
return null;
}
@Override
public Configuration getConfiguration(ConfigurationSource source) {
return new Log4j2Configuration();
}
@Override
public Configuration getConfiguration(String name, URI configLocation) {
return new Log4j2Configuration();
}
}
private static class Log4j2Configuration extends DefaultConfiguration {
public Log4j2Configuration() {
setName("app-log4j2");
String root = System.getProperty("APP_ROOT", "/tmp");
if (!root.endsWith("/")) {
root += "/";
}
// MARKER
Layout<? extends Serializable> layout = PatternLayout.createLayout(PATTERN_LAYOUT, null, null, null, null);
String oneDay = TimeUnit.DAYS.toMillis(1) + "";
String oneMB = (1024 * 1024) + "";
final TimeBasedTriggeringPolicy timeBasedTriggeringPolicy = TimeBasedTriggeringPolicy.createPolicy(oneDay,
"true");
final SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy = SizeBasedTriggeringPolicy.createPolicy(oneMB);
final CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(timeBasedTriggeringPolicy,
sizeBasedTriggeringPolicy);
final DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy("7", "1", null,
Deflater.DEFAULT_COMPRESSION + "", this);
Appender appender = RollingFileAppender.createAppender(root + LOG_FILE_NAME, LOG_FILE_NAME_PATTERN, "true",
"app-log-file-appender", "true", "true", policy, strategy, layout, null, null, null, null, null);
addAppender(appender);
getRootLogger().addAppender(appender, Level.INFO, null);
}
}
}
如果我在上面的代码中注释掉
MARKER
之后的代码,它会起作用,但似乎缺少配置滚动文件追加器的功能。我应该怎么做才能解决这个问题?在log4j 2.x中,您必须以这种方式指定日期格式
public static final String LOG_FILE_NAME_PATTERN = LOG_FILE_NAME + "-%d{dd-MM-yyy}";
标记格式的开头%
表示它是一种日期格式(您也可以使用d
)date
- 在花括号
中定义格式化程序的选项。在本例中为日期格式。你可以使用a可以接受的任何东西{}
->%d{ABSOLUTE}
HH:mm:ss,SSS
->%d{COMPACT}
yyyymmddhhmmssss
->%d{DATE}
dd-MMM-yyyy-HH:mm:ss,SSS
->%d{ISO8601_BASIC}
yyyyMMdd HHmmss,SSS
->%d{ISO8601}
yyyy-MM-dd-HH:MM:ss,SSS
注:此信息基于log4j 2.0-beta9(当前版本)。由于它是beta版,所以可能会略有变化。如何初始化此log4j2实例?我的意思是无论是在主课还是其他地方?你能告诉我你采取的方法吗
public static final String LOG_FILE_NAME_PATTERN = LOG_FILE_NAME + "-%d{dd-MM-yyy}";