下面列出了org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration#org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private AppenderComponentBuilder createFileAppender(ConfigurationBuilder<BuiltConfiguration> builder, String logFile, LayoutComponentBuilder layout) {
ByteValue size = ByteValue.of(getValue("log_file_size", sources, LoggingConfiguration.DEFAULT_MAX_SIZE));
return builder.newAppender("rolling", "RollingFile")
.addAttribute("fileName", logFile)
.addAttribute("filePattern", logFile + ".%i")
.add(layout)
.addComponent(builder.newComponent("Policies")
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", size.getBytes() + "B")))
// Always keep exactly one history file.
// This is needed to ensure that the rest of the file can be sent when its rotated.
// Storing multiple history files would give the false impression that, for example,
// when currently reading from apm.log2, the reading would continue from apm.log1.
// This is not the case, when apm.log2 is fully read, the reading will continue from apm.log.
// That is because we don't want to require the reader having to know the file name pattern of the rotated file.
.addComponent(builder.newComponent("DefaultRolloverStrategy").addAttribute("max", 1));
}
/**
* Returns the pattern layout defined by {@link LoggingSettings}.
*
* @param builder The builder.
* @return The pattern layout.
*/
private LayoutComponentBuilder getPatternLayout(ConfigurationBuilder<BuiltConfiguration> builder) {
var pattern = "";
var formatType = Luna.loggingSettings().formatType();
switch (formatType) {
case BASIC:
pattern = "[%d{dd MMM yyyy, h:mm:ss a}] [%level] %msg%n";
break;
case VERBOSE:
pattern = "%d{[dd MMM yyyy HH:mm:ss]} [%logger{36}] [%t]%n%level: %msg%n";
break;
}
if (pattern.isEmpty()) {
throw new IllegalStateException("No pattern layout for " + formatType + "!");
}
return builder.newLayout("PatternLayout").addAttribute("pattern", pattern);
}
private LayoutComponentBuilder createLayout(ConfigurationBuilder<BuiltConfiguration> builder, LogFormat logFormat) {
if (logFormat == LogFormat.PLAIN_TEXT) {
return builder
.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%thread] %-5level %logger{36} - %msg%n");
} else {
String serviceName = getValue(CoreConfiguration.SERVICE_NAME, sources, ServiceNameUtil.getDefaultServiceName());
return builder.newLayout("EcsLayout")
.addAttribute("eventDataset", serviceName + ".apm");
}
}
private LayoutComponentBuilder newPatternLayout(final String pattern) {
final LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout");
if (pattern != null) {
layoutBuilder.addAttribute("pattern", pattern);
}
return layoutBuilder;
}
private LayoutComponentBuilder newPatternLayout(final String pattern) {
final LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout");
if (pattern != null) {
layoutBuilder.addAttribute("pattern", pattern);
}
return layoutBuilder;
}
private LayoutComponentBuilder createLayout(final String appenderName, final Properties properties) {
final String type = (String) properties.remove(CONFIG_TYPE);
if (Strings.isEmpty(type)) {
throw new ConfigurationException("No type attribute provided for Layout on Appender " + appenderName);
}
final LayoutComponentBuilder layoutBuilder = builder.newLayout(type);
return processRemainingProperties(layoutBuilder, properties);
}
static Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
AppenderComponentBuilder console = builder.newAppender("Stdout", "Console");
LayoutComponentBuilder layout = builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable");
console.add(layout);
FilterComponentBuilder filter = builder.newFilter("MarkerFilter", Filter.Result.ACCEPT, Filter.Result.DENY);
filter.addAttribute("marker", "FLOW");
console.add(filter);
builder.add(console);
ComponentBuilder triggeringPolicies = builder.newComponent("Policies")
.addComponent(builder.newComponent("CronTriggeringPolicy")
.addAttribute("schedule", "0 0 0 * * ?"))
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
.addAttribute("size", "100M"));
AppenderComponentBuilder rollingFile = builder.newAppender("rolling", "RollingFile");
rollingFile.addAttribute("fileName", "target/rolling.log");
rollingFile.addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz");
rollingFile.add(layout);
rollingFile.addComponent(triggeringPolicies);
builder.add(rollingFile);
AppenderComponentBuilder file = builder.newAppender("FileSystem", "File");
file.addAttribute("fileName", "target/logging.log");
file.add(layout);
builder.add(file);
LoggerComponentBuilder logger = builder.newLogger("com", Level.DEBUG);
logger.add(builder.newAppenderRef("Stdout"));
logger.add(builder.newAppenderRef("rolling"));
logger.add(builder.newAppenderRef("FileSystem"));
logger.addAttribute("additivity", false);
builder.add(logger);
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.ERROR);
rootLogger.add(builder.newAppenderRef("Stdout"));
rootLogger.add(builder.newAppenderRef("rolling"));
// rootLogger.add(builder.newAppenderRef("syslogAppender"));
rootLogger.add(builder.newAppenderRef("FileSystem"));
rootLogger.addAttribute("additivity", false);
builder.add(rootLogger);
try {
builder.writeXmlConfiguration(System.out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return builder.build();
}
@Override
public AppenderComponentBuilder add(final LayoutComponentBuilder builder) {
return addComponent(builder);
}
@Override
public LayoutComponentBuilder newLayout(final String type) {
return new DefaultLayoutComponentBuilder(this, type);
}
@Test
public void testRolling() throws Exception {
final ConfigurationBuilder< BuiltConfiguration > builder =
ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel( Level.ERROR);
builder.setConfigurationName("RollingBuilder");
// create the console appender
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
builder.add( appenderBuilder );
final LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n");
final ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
.addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?"))
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M"));
appenderBuilder = builder.newAppender("rolling", "RollingFile")
.addAttribute("fileName", "target/rolling.log")
.addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz")
.add(layoutBuilder)
.addComponent(triggeringPolicy);
builder.add(appenderBuilder);
// create the new logger
builder.add( builder.newLogger( "TestLogger", Level.DEBUG )
.add( builder.newAppenderRef( "rolling" ) )
.addAttribute( "additivity", false ) );
builder.add( builder.newRootLogger( Level.DEBUG )
.add( builder.newAppenderRef( "rolling" ) ) );
final Configuration config = builder.build();
config.initialize();
assertNotNull("No rolling file appender", config.getAppender("rolling"));
assertEquals("Unexpected Configuration", "RollingBuilder", config.getName());
// Initialize the new configuration
final LoggerContext ctx = Configurator.initialize( config );
Configurator.shutdown(ctx);
}