log4j2 PatternLayout
时间: 2023-10-30 09:08:51 浏览: 82
Log4j2 PatternLayout 是一种日志输出格式化方式,它可以通过指定一些占位符来将日志信息格式化成指定的格式。以下是一些常用的占位符:
- %d:输出日志时间,可以通过指定格式来控制输出格式。
- %p:输出日志级别。
- %t:输出线程名。
- %c:输出日志所属的类名。
- %m:输出日志信息。
- %n:输出换行符。
- %C:输出日志所属的类的全限定名。
- %L:输出日志在源文件中的行号。
- %M:输出日志所在方法的名称。
下面是一个示例:
```
appender.console.type = Console
appender.console.name = CONSOLE
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] [%c{1}] %m%n
```
以上示例中,输出的日志信息格式为`时间 线程名 日志级别 类名 日志信息`。其中,时间格式为`yyyy-MM-dd HH:mm:ss.SSS`,日志级别占位符使用了`%-5p`,表示将日志级别输出为左对齐的5个字符,不足5个字符的在右侧填充空格。类名占位符使用`%c{1}`,表示输出类名的最后一个单词,以减少日志信息中的冗余。
相关问题
##\u8F93\u51FA\u914D\u7F6E log4j.rootLogger = debug, stdout, File ## \u63A7\u5236\u53F0\u8F93\u51FA log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ## \u6587\u4EF6\u4E2D\u8F93\u51FA log4j.appender.File = org.apache.log4j.FileAppender log4j.appender.File.File = D://log4j.log log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
这是一个 log4j 的配置文件,它定义了日志的输出方式和格式:
1. 配置了 rootLogger 的级别为 debug,同时输出到控制台和文件;
2. 配置了控制台输出的方式为 ConsoleAppender,输出格式为指定的 ConversionPattern;
3. 配置了文件输出的方式为 FileAppender,输出到指定的文件,输出格式也为指定的 ConversionPattern。
log4j2 代码PatternLayout
log4j2的PatternLayout是一种用于将日志消息格式化为字符串的方式。它允许你在日志输出中使用占位符,以便在运行时将动态值替换为日志消息中的特定部分。以下是一个示例PatternLayout的代码:
```java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.core.layout.PatternLayout;
public class Example {
private static final Logger logger = LogManager.getLogger(Example.class);
public static void main(String[] args) {
// Configure Log4j2 programmatically
LoggerContext context = Configurator.initialize(
ConfigurationBuilderFactory.newConfigurationBuilder()
.build());
// Create a PatternLayout with a custom format string
PatternLayout layout = PatternLayout.newBuilder()
.withPattern("[%d{ISO8601}] [%t] [%p] [%c] %m%n")
.build();
// Add the PatternLayout to the root logger
Configurator.getRootLogger().addAppender(
context.getConfiguration()
.getAppender("CONSOLE")
.newBuilder()
.setLayout(layout)
.build());
// Log a message with dynamic values
String name = "Alice";
int age = 30;
logger.info("Hello, {}, you are {} years old.", name, age);
}
}
```
在上面的代码中,我们使用PatternLayout来定义一个自定义的日志消息格式。在这个例子中,我们使用了以下占位符:
- `%d{ISO8601}`:输出日志事件的时间戳,使用ISO8601格式。
- `%t`:输出执行线程的名称。
- `%p`:输出日志事件的级别。
- `%c`:输出记录器的名称。
- `%m`:输出日志消息本身。
- `%n`:输出一个平台相关的行结束符。
我们还使用了`%{}`语法来指定ISO8601格式。最后,我们将PatternLayout添加到根记录器的控制台appender中,并使用记录器打印一条带有动态值的日志消息。
阅读全文