Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven项目中的Log4j日志记录_Java_Maven_Selenium_Logging_Log4j - Fatal编程技术网

Java maven项目中的Log4j日志记录

Java maven项目中的Log4j日志记录,java,maven,selenium,logging,log4j,Java,Maven,Selenium,Logging,Log4j,我正在使用Maven运行Selenium自动化测试。从执行到结束,我看到了很多日志 通过这段代码,我知道只有.info警告和.warn进入控制台,而.debug没有 public static void main(String[] args) { Logger log = LogManager.getLogger(); log.debug("its a debug message"); log.info("its a info message");

我正在使用
Maven
运行Selenium自动化测试。从执行到结束,我看到了很多日志

通过这段代码,我知道只有
.info
警告和
.warn
进入控制台,而
.debug
没有

public static void main(String[] args) {
        Logger log = LogManager.getLogger();
        log.debug("its a debug message");
        log.info("its a info message");
        log.warn("its a warning message");
    }
输出:

2015-12-24 13:58:21,166 ERROR Logger contains an invalid element or attribute "append"
[INFO ] 2015-12-24 13:58:21.245 [main] DebuggerTest - its a info message
[WARN ] 2015-12-24 13:58:21.247 [main] DebuggerTest - its a warning message
现在,我想将一个变量与我的
mvn
命令一起传入,该命令将打开/关闭控制台中的任何日志

类似于:
mvn测试——调试-false
这样可以在生成的日志文件中看到日志,但在控制台中看不到

更多信息: 我想要一些类似于这里给出的东西:

此处建议用户“数学”使用:
Logger.getRootLogger().setLevel(Level.WARN)如果不想查看调试日志

我想从
mvn
命令行启用/禁用此功能

更多信息2:

以下是我的log4j2.xml的外观:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>
    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
        </Console>
        <RollingFile name="trace-log" fileName="${log-path}/rnf-info.log"
                     filePattern="${log-path}/rnf-trace-%d{yyyy-MM-dd}.log" append="false">
            <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>
        <RollingFile name="debug-log" fileName="${log-path}/rnf-debug.log"
                     filePattern="${log-path}/rnf-debug-%d{yyyy-MM-dd}.log" append="false">
            <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>
    </Appenders>
    <Loggers>
        <Logger name="com.rnf" level="debug" additivity="false" append="false">
            <appender-ref ref="trace-log" level="info"/>
            <appender-ref ref="debug-log" level="debug"/>
        </Logger>
        <Root level="info" additivity="false">
            <AppenderRef ref="console-log"/>
        </Root>
    </Loggers>
</Configuration>

日志
[%-5level]%d{yyyy-MM-dd HH:MM:ss.SSS}[%t]%c{1}-%msg%n
[%-5level]%d{yyyy-MM-dd HH:MM:ss.SSS}[%t]%c{1}-%msg%n

我认为您可以使用
-Dlog4j.configuration=
直接在命令行上将记录器的配置设置为您想要的任何设置


请参阅此处的文档:

您可以尝试使用的是变量

log4j2配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="LEVEL">WARN</Property> <!-- default value -->
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="${sys:LEVEL}">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>
编辑:

在您的配置中,控制台的级别是固定的-静态的,设置为INFO,但您希望具有动态行为

您需要添加另一个属性

<Properties>
    <Property name="log-path">logs</Property>
    <Property name="LEVEL">WARN</Property> <!-- default value -->
</Properties>
但它可以从命令行指定为标准JVM参数
-D..


所以,如果您想在控制台中获得更多消息,您将运行
mvn test-DLEVEL=DEBUG

您的日志记录配置是什么?为什么不能为控制台设置let say warn级别,为文件设置debug级别?我认为这是可行的(我不知道如何做,但我会尝试),但如何让maven知道在控制台中显示哪些,哪些不显示?这与maven无关。。。您必须配置日志框架,它基本上会将消息附加到文件和控制台,但您可以指定不同的日志级别,因此,您将在文件中看到更多的消息,而在控制台中看到更少的消息…您可以从这里开始阅读-我的意思是说,我想用maven命令传递一个变量,它将禁用控制台上的任何日志,如果我没有用maven命令传递该变量,那么我将在控制台中看到日志。因此,该命令将是
mvn test-DLEVEL=DEBUG
并且我不会在控制台中看到日志?不是真的,我的逻辑被扭曲了,但是请随意修改它以满足您的需要。上面的示例默认情况下仅显示级别为
WARN
及以上的消息,如果要查看
DEBUG
消息,则必须使用
-DLEVEL=DEBUG
属性标记以其他方式写入my
log4j2.xml
,请参见我已粘贴在上面的内容。我不知道如何修改或使用它来获取控制台中的日志或控制台中的停止日志。对不起,我是新手。那么,在我的
.xml
中,哪一行/标记表示控制台级别是
固定静态的
<Properties>
    <Property name="log-path">logs</Property>
    <Property name="LEVEL">WARN</Property> <!-- default value -->
</Properties>
<Root level="${sys:LEVEL}">