下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖:
org.apache.logging.log4j
log4j-core
2.20.0
https://logging.apache.org/log4j/2.x/manual/configuration.html
例如,下面配置文件片段中用到了pattern:
pattern的详细说明请参考:
https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
为了便于对日志的过滤、搜索、排序等,通常每个类都获取它自己的带名字的Logger,而不是所有类共用一个Logger。
例如通常的做法:
private static final Logger logger = LogManager.getLogger();
创建一个Logger ,名字就是调用类的全限定名。
Logger 可以声明为static的、或者非static的,但建议声明为static的。这样做的目的是为了节约实例化的成本。
如果没有特别说明,下面代码示例中maven工程中src/main/resources/log4j2.xml的配置内容如下:
LogManager.ROOT_LOGGER_NAME是root Logger的名字,这个名字是空字符串""。
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
public static Logger logger = LogManager.getLogger();
public static void main(String[] args) {
System.out.println("root logger name: " + LogManager.ROOT_LOGGER_NAME);
//System.out.println("logger name: " + logger.getName());
}
}
运行结果:
从上面输出结果可以发现,root Logger的名字是空字符串""。
LogManager.getLogger()返回一个带名字的Logger,这个Logger的名字就是调用的类的全限定名称。这个方法经常使用。
下面代码中获取Logger的方法是典型的获取方法。
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
System.out.println("logger name: " + logger.getName());
}
}
运行输出:
从上面输出可以看出,Logger的名字是调用类的全限定名称,此处是com.thb.Test。
打印日志的代码:
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
System.out.println("logger name: " + logger.getName());
logger.info("hello");
}
}
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
double r = 2;
logger.info("面积为:" + Math.PI * Math.pow(r, 2));
}
}
运行输出:
15:25:00.167 [main] INFO com.thb.Test - 面积为:12.566370614359172
定义一个类,类中定义了自己的静态Logger:
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class AnotherClass {
private static final Logger logger = LogManager.getLogger();
public void method() {
logger.info("hello from AnotherClass");
}
}
定义一个主类,在主类中也定义了一个静态Logger:
package com.thb;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
logger.info("hello from Test");
AnotherClass another = new AnotherClass();
another.method();
}
}
运行结果:
15:10:28.161 [main] INFO com.thb.Test - hello from Test
15:10:28.199 [main] INFO com.thb.AnotherClass - hello from AnotherClass