```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-logging-log4j2</artifactId>
</dependency>
```

### 1、描述

日志扩展插件，基于 log4j2 适配插件。

### 2、配置示例

日志等级的优先顺序：appender > logger > root。具体配置示例（描述可见：[《日志配置说明》](/article/746)）：

```yaml
solon.app:
  name: demoapp

# 以下为默认值，可以都不加，或者想改哪行加哪行(支持"云端配置服务"进行配置，支持写到"云端日志服务")
solon.logging.appender:
  console:
    level: TRACE
    enable: true #是否启用
  file:
    name: "logs/${solon.app.name}"
    level: INFO
    enable: true #是否启用
    extension: ".log"   #v2.2.18 后支持（例：.log, .log.gz, .log.zip）
    maxFileSize: "10 MB"
    maxHistory: "7" #单位：天
  cloud:
    level: INFO
    enable: true #是否启用
    
# 记录器级别的配置示例
solon.logging.logger:
  "root":  #默认记录器配置
    level: TRACE
  "com.zaxxer.hikari":
    level: WARN    
```



如果需要指定 file 的 rolling 路径：

```yaml
solon.logging.appender:
  file:
    name: "logs/${solon.app.name}"
    rolling: "logs/${solon.app.name}_%d{yyyy-MM-dd}_%i.log"
```

pattern 格式配置参考（以下为内置的默认格式）：

```yaml
solon.logging.appender:
  console:
    pattern: "%highlight{%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} #%5X{pid} [-%t][*%X{traceId}]%tags[%logger{20}]:} %n%msg%n"
  file:
    pattern: "%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} #%5X{pid} [-%t][*%X{traceId}]%tags[%logger{20}]: %n%msg%n"
```


### 3、应用示例（建议用slf4j作为界面，方便切换）

```java
@SolonMain
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args);
    }
}

@Controller
public class DemoController{
    static Logger log = LoggerFactory.getLogger(DemoController.class);
    
    @Mapping("/hello")
    public void hello(String name){
        //默认的打印格式，支持 MDC 显示
        MDC.put("user", name);
        
        log.info("hello world!");
    }
}
```


### 4、Xml 高度定制（比如，不同业务的日志写到不同文件里）


如果想高度定制，可以自定义 xml 配置（支持环境切换），放到资源根目录下。

```yaml
#默认配置，可以从插件里复制 log4j2-def.xml 进行修改（-solon 可以支持 solon 特性）
log4j2-solon.xml

#环镜配置
log4j2-solon-{env}.xml 
```

也可以用 `log4j2.xml` 配置文件。但其它配置都会失效，也没有环境切换功能


复制参考：[https://gitee.com/opensolon/solon/blob/main/solon-projects/solon-logging/solon-logging-log4j2/src/main/resources/META-INF/solon_def/log4j2-def.xml](https://gitee.com/opensolon/solon/blob/main/solon-projects/solon-logging/solon-logging-log4j2/src/main/resources/META-INF/solon_def/log4j2-def.xml)

复杂的历史文件删除配置，需要参考官网：

配置参考：[https://logging.apache.org/log4j/2.x/manual/appenders.html](https://logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover)
