35.md 8.1 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4
# Log4j2 xml 配置示例

> 原文: [https://howtodoinjava.com/log4j2/log4j-2-xml-configuration-example/](https://howtodoinjava.com/log4j2/log4j-2-xml-configuration-example/)

W
wizardforcel 已提交
5
[Apache Log4j2](https://logging.apache.org/log4j/2.x/) 是对 Log4j 1.x 的升级,与以前的版本相比有了显着改进,例如性能提高,自动重新加载已修改的配置文件, [Java8 lambda](https://howtodoinjava.com/java-8-tutorial/) 支持和自定义日志级别。
W
wizardforcel 已提交
6

W
wizardforcel 已提交
7
Log4j2.4 及更高版本需要 Java 7。 版本 2.0-alpha1 至 2.3 需要 Java 6。
W
wizardforcel 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

## 1\. log4j2 maven 依赖

要将 **Log4j2** 包含在您的项目中,请在项目中包含以下 maven 依赖项。

```java
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.6.1</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.6.1</version>
</dependency>

```

W
wizardforcel 已提交
27
## 2\. 用于控制台日志`log4j2.xml`
W
wizardforcel 已提交
28

W
wizardforcel 已提交
29
您可以使用下面的`log4j2.xml`将日志输出到控制台。 请注意,如果找不到配置文件,则将使用`DefaultConfiguration`。 这也将日志输出到控制台。
W
wizardforcel 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

```java
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
	<Appenders>
		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout
				pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
		</Console>
	</Appenders>
	<Loggers>
		<Root level="debug" additivity="false">
			<AppenderRef ref="console" />
		</Root>
	</Loggers>
</Configuration>

```

W
wizardforcel 已提交
49
## 3\. 用于滚动文件日志的`log4j2.xml`
W
wizardforcel 已提交
50

W
wizardforcel 已提交
51
您可以使用下面的`log4j2.xml`文件将日志输出到基于日期的滚动文件 – 以及控制台。
W
wizardforcel 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

```java
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
	<Properties>
		<Property name="basePath">C:\\logs</Property>
	</Properties>

	<Appenders>
		<RollingFile name="fileLogger" fileName="${basePath}/app-info.log" filePattern="${basePath}/app-info-%d{yyyy-MM-dd}.log">
			<PatternLayout>
				<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
			</PatternLayout>
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
			</Policies>
		</RollingFile>

		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout	pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
		</Console>
	</Appenders>
	<Loggers>
		<Logger name="com.howtodoinjava" level="debug" additivity="true">
			<appender-ref ref="fileLogger" level="debug" />
		</Logger>
		<Root level="debug" additivity="false">
			<appender-ref ref="console" />
		</Root>
	</Loggers>
</Configuration>

```

W
wizardforcel 已提交
86
## 4\. `log4j2.xml`文件位置
W
wizardforcel 已提交
87

W
wizardforcel 已提交
88
您应该将`log4j2.xml`放在应用的类路径中的任何位置。 Log4j 将扫描所有类路径位置以查找此文件,然后加载它。
W
wizardforcel 已提交
89

W
wizardforcel 已提交
90 91
![Log4j2.xml file location](img/a07bf3b94d1c596ad3468a1b03916106.png)

W
wizardforcel 已提交
92
`Log4j2.xml`文件位置
W
wizardforcel 已提交
93 94 95



W
wizardforcel 已提交
96
## 5\. `log4j2.xml`示例
W
wizardforcel 已提交
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130

让我们编写一个 Java 类,并写一些日志语句,以验证控制台和日志文件中的日志是否也在增加。 它将不同的日志级别记录到不同的日志中

```java
package com.howtodoinjava.log4j2.examples;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4j2HelloWorldExample 
{
	private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName());

	public static void main(String[] args) 
	{
		LOGGER.debug("Debug Message Logged !!!");
		LOGGER.info("Info Message Logged !!!");
		LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
	}
}

```

现在,当您运行上述程序时,您将在控制台中获得以下日志。

```java
[DEBUG] 2016-06-16 12:17:42.972 [main] Log4j2HelloWorldExample - Debug Message Logged !!!
[INFO ] 2016-06-16 12:17:42.996 [main] Log4j2HelloWorldExample - Info Message Logged !!!
[ERROR] 2016-06-16 12:17:42.997 [main] Log4j2HelloWorldExample - Error Message Logged !!!
java.lang.NullPointerException: NullError
	at com.howtodoinjava.log4j2.examples.Log4j2HelloWorldExample.main(Log4j2HelloWorldExample.java:14) [classes/:?]

```

W
wizardforcel 已提交
131
如果您更改系统日期并再次运行该应用,则会在配置的位置找到两个日志文件,即`app-info.log``app-info-2016-06-15.log` –第二个文件将在该文件上滚动。
W
wizardforcel 已提交
132

W
wizardforcel 已提交
133
## 6\. 带有多文件附加器的`log4j2.xml`
W
wizardforcel 已提交
134

W
wizardforcel 已提交
135
使用此**简单`log4j2.xml`**作为**多个日志文件**中的日志语句的快速参考。 它使用`LevelRangeFilter`将不同级别的日志(`debug``info`等)记录到不同的文件中,以便您的日志干净且分开,以便于分析。
W
wizardforcel 已提交
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244

```java
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">

	<!-- Logging Properties -->
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
        <Property name="APP_LOG_ROOT">c:/temp</Property>
    </Properties>

    <Appenders>

    	<!-- Console Appender -->
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

        <!-- File Appenders on need basis -->
        <RollingFile name="frameworkLog" fileName="${APP_LOG_ROOT}/app-framework.log" 
			filePattern="${APP_LOG_ROOT}/app-framework-%d{yyyy-MM-dd}-%i.log">
			<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="10"/>
		</RollingFile>

		<RollingFile name="debugLog" fileName="${APP_LOG_ROOT}/app-debug.log" 
			filePattern="${APP_LOG_ROOT}/app-debug-%d{yyyy-MM-dd}-%i.log">
			<LevelRangeFilter minLevel="DEBUG" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="10"/>
		</RollingFile>

		<RollingFile name="infoLog" fileName="${APP_LOG_ROOT}/app-info.log" 
			filePattern="${APP_LOG_ROOT}/app-info-%d{yyyy-MM-dd}-%i.log" >
			<LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="10"/>
		</RollingFile>

		<RollingFile name="errorLog" fileName="${APP_LOG_ROOT}/app-error.log" 
			filePattern="${APP_LOG_ROOT}/app-error-%d{yyyy-MM-dd}-%i.log" >
			<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="10"/>
		</RollingFile>

		<RollingFile name="perfLog" fileName="${APP_LOG_ROOT}/app-perf.log" 
			filePattern="${APP_LOG_ROOT}/app-perf-%d{yyyy-MM-dd}-%i.log" >
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="1"/>
		</RollingFile>

		<RollingFile name="traceLog" fileName="${APP_LOG_ROOT}/app-trace.log" 
			filePattern="${APP_LOG_ROOT}/app-trace-%d{yyyy-MM-dd}-%i.log" >
			<PatternLayout pattern="${LOG_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="19500KB" />
			</Policies>
			<DefaultRolloverStrategy max="1"/>
		</RollingFile>

    </Appenders>

    <Loggers>

    	<Logger name="com.howtodoinjava.app.somePackage" additivity="false" level="trace">
    		<AppenderRef ref="traceLog" />
            <AppenderRef ref="Console" />
        </Logger>

        <Logger name="com.howtodoinjava.app" additivity="false" level="debug">
	        <AppenderRef ref="debugLog" />
	        <AppenderRef ref="infoLog"  />
            <AppenderRef ref="errorLog" />
            <AppenderRef ref="Console"  />
        </Logger>

        <Logger name="org.framework.package" additivity="false" level="info">
            <AppenderRef ref="perfLog" />
            <AppenderRef ref="Console"/>
        </Logger>

        <Root level="warn">
            <AppenderRef ref="Console"/>
        </Root>

    </Loggers>

</Configuration>

```

学习愉快!