要实现Log4j不同模块输出到不同的文件中,需要使用配置文件。下面是实现此功能的步骤:
- 创建Log4j配置文件
在项目中,创建一个名为log4j.properties或log4j.xml的配置文件,并将其放在类路径下(src/main/resources目录下)。这个配置文件需要定义多个输出端,每个输出端和对应的日志级别,以及如何输出。一个简单的log4j配置文件log4j.properties如下所示:
log4j.rootLogger=DEBUG, stdout, module1Log, module2Log
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
# 模块1输出到module1.log
log4j.appender.module1Log=org.apache.log4j.RollingFileAppender
log4j.appender.module1Log.File=module1.log
log4j.appender.module1Log.MaxFileSize=10MB
log4j.appender.module1Log.MaxBackupIndex=10
log4j.appender.module1Log.layout=org.apache.log4j.PatternLayout
log4j.appender.module1Log.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
log4j.logger.module1Logger=DEBUG, module1Log
# 模块2输出到module2.log
log4j.appender.module2Log=org.apache.log4j.RollingFileAppender
log4j.appender.module2Log.File=module2.log
log4j.appender.module2Log.MaxFileSize=10MB
log4j.appender.module2Log.MaxBackupIndex=10
log4j.appender.module2Log.layout=org.apache.log4j.PatternLayout
log4j.appender.module2Log.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
log4j.logger.module2Logger=DEBUG, module2Log
上述配置定义了4个输出器,stdout输出到控制台,module1Log和module2Log分别输出到module1.log和module2.log文件,log级别为DEBUG。配置中同时定义了两个logger,分别用于module1和module2的日志记录。
- 在代码中使用Log4j
在代码中,需要使用Log4j库来记录日志。可按照以下步骤进行:
(1)在需要记录日志的类中,定义Logger对象。例如,要记录模块1的日志,创建一个Logger对象:
private static final Logger logger = LogManager.getLogger("module1Logger");
(2)在需要记录日志的地方,使用Logger的方法进行日志记录。例如,打印DEBUG级别的日志:
logger.debug("this is module 1 debug log");
使用上面的配置和代码,将看到模块1的日志输出到module1.log文件中,输出的日志内容类似于:
2022-08-31 20:10:20,123 [main] DEBUG com.example.Module1 - this is module 1 debug log
- 测试输出
为了测试上述配置是否生效,我们可以使用一个简单的Java程序来输出Log。下面是一个示例程序:
public class App {
private static final Logger logger = LogManager.getLogger(App.class);
public static void main(String[] args) {
logger.debug("this is main debug log");
logger.info("this is main info log");
Module1 module1 = new Module1();
module1.method1();
module1.method2();
Module2 module2 = new Module2();
module2.method1();
module2.method2();
}
}
class Module1 {
private static final Logger logger = LogManager.getLogger("module1Logger");
void method1() {
logger.debug("this is module 1 method 1 debug log");
logger.info("this is module 1 method 1 info log");
}
void method2() {
logger.debug("this is module 1 method 2 debug log");
logger.warn("this is module 1 method 2 warn log");
}
}
class Module2 {
private static final Logger logger = LogManager.getLogger("module2Logger");
void method1() {
logger.debug("this is module 2 method 1 debug log");
logger.info("this is module 2 method 1 info log");
}
void method2() {
logger.debug("this is module 2 method 2 debug log");
logger.error("this is module 2 method 2 error log");
}
}
上述代码中,分别定义了App、Module1和Module2三个类,并在其中使用不同的Logger对象记录日志。运行上述代码,将在控制台输出main类的日志信息,同时在module1.log和module2.log中保存不同的模块日志信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Log4j不同模块输出到不同的文件中 - Python技术站