Log4j 2.x
Log4j2.x
log4j-api:log4j2 定义的API
log4j-core:log4j2 上述API的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <properties>
<log4j.version>2.17.2</log4j.version>
</properties>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j.version}</version>
</dependency>
|
log4j2里面日志有8个等级,由低到高是:
all<trace<debug<info<warn<error<fatal<off
看下面的配置,这个配置会输出error及以上的日志级别,也就是onMatch匹配的是 大于等于 该等级的日志,输出的就是error,fatal
1
2
| <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
|
然后是一个相反的配置,这个配置会输出error以下的日志级别,也就是onMismatch匹配的是 小于 该等级的日志,输出的就是warn,info,debug,trace
1
| <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT" />
|
1
2
3
4
5
6
| <loggers>
</AsyncLogger>
</loggers>
|
loggers标签,用于定义logger的lever和所采用的appender,其中appender-ref必须为先前定义的 appenders的名称,例如,此处为Console。那么log就会以appender所定义的输出格式来输出log。
root标签为log的默认输出形式,如果一个类的log没有在loggers中明确指定其输出lever与格式,那么就会采用root中定义的格式。
private static Logger logger = LogManager.getLogger(Foo.class.getName());
gradle
compile ‘org.apache.logging.log4j:log4j-api:2.0-beta9’
compile ‘org.apache.logging.log4j:log4j-core:2.0-beta9’
The name of the configuration file should be log4j2.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="log.path">/data/logs</Property>
<Property name="log.level">debug</Property>
<Property name="project.name">nettyx</Property>
</Properties>
<File name="File" fileName="foo.log" append="false">
<PatternLayout pattern="%highlight{%d{ISO8601} %-5level [%t] %C{3} (%F:%L) - %m}%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ABSOLUTE} %level{length=1} [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.log4j.xml" level="debug">
</Logger>
<Root level="debug">
</Root>
</Loggers>
</Configuration>
|
1
2
| private final static Logger logger = LoggerFactory.getLogger(Class0.class);
|
log4j2按日志级别输出到指定文件
https://www.cnblogs.com/jessezeng/p/5144317.html
http://stackoverflow.com/questions/24177601/difference-between-asynclogger-and-asyncappender-in-log4j2
http://www.cnblogs.com/backpacker/archive/2012/12/10/2812100.html
简单使用可以这样
1
| BasicConfigurator.configure();
|
不需要配置文件
filePattern (注意使用.gz的后缀会自动压缩,若是.log则是原始文本)
rollingfile
https://issues.apache.org/jira/browse/LOG4J2-435
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <RollingFile name="Rolling" fileName="${sys:log.path}/${sys:project.name}/${sys:log.level}.log" filePattern="${sys:log.path}/${sys:project.name}/${sys:log.level}-%d{yyyyMMdd}-%i.log.zip">
<PatternLayout charset="UTF-8">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %p %c{1.} - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB" />
</Policies>
<DefaultRolloverStrategy max="160">
<Delete basePath="${sys:log.path}/${sys:project.name}">
<IfAny>
<IfLastModified age="2d" />
<IfAccumulatedFileSize exceeds="1 mb" />
</IfAny>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
|