小编Rem*_*pma的帖子

Picocli:如何在父命令和子命令之间共享选项

如何支持所有(或部分)命令和子命令的共享选项?例如,如果最终用户--stacktrace在命令行参数中的任何位置提供,则打印的任何错误都将包括堆栈跟踪。

我们可以使用 Mixin 定义布尔--stacktrace选项,并在所有(子)命令中包含此 Mixin,或者使用继承并让所有命令子类化定义布尔选项的类--stacktrace,但无论哪种方式,都会为每个命令。哪个选项为 true 取决于用户在 args 中放置的位置--stacktrace,因此确定是否--stacktrace提供了意味着迭代所有父命令并查看是否有任何为 true。

如果有一种更方便的方法来检测用户是否指定了这样的共享选项,那就太好了。

(另请参阅https://github.com/remkop/picocli/issues/580

shell command-line command picocli

2
推荐指数
1
解决办法
2007
查看次数

Log4j 2 中的单独错误日志记录

Log4j 2 允许将类和行信息包含在日志条目中。然而,作者声称创建条目需要 4-5 倍的时间。

我的日志的 99.5% 由正常操作条目(信息)组成,其中 line 和 class 并不是真正必要的。我想知道是否有任何方法可以将 log4j 2 配置为仅将文件、类和行包含到带有“警告”或更高级别的条目中?

java configuration logging log4j2

1
推荐指数
1
解决办法
2959
查看次数

Log4j 2性能:单线程控制台在Logback中的记录速度比Log4j 2快吗?

最近,我尝试了Log4j 2日志记录,并尝试将其性能与我本地Mac机器上的Logback进行比较.令人惊讶的是,我看到Logback在我的测试用例中表现更好.我希望Log4j 2比Log4j 2网站声称的Logback做得更好,所以我想检查一下我在使用Log4j 2时是否做错了.

为了测试,我使用了直接Log4j 2和Logback 而不使用SLF4J.此外,它ConsoleAppender用于两个日志框架,我测试的模式是:

<Pattern>%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
Run Code Online (Sandbox Code Playgroud)

日志测试代码是:

logger.info("This is a bootstrap message");

long start = System.currentTimeMillis();
for (int i = 1; i <= 1000000; i++) {
    logger.info("Order={} successfully processed", "ABC123");
}
long end = System.currentTimeMillis();
logger.info("time taken to process={} ms", end - start);
Run Code Online (Sandbox Code Playgroud)

我为每个日志记录分别运行了10次测试,并尝试将平均时间用于处理.出乎意料的是,每次运行都会更好地执行logback.我尝试使用params禁用Log4j 2附带的默认GC日志记录:

-Dlog4j2.enable.threadlocals=false -Dlog4j2.enable.direct.encoders=false
Run Code Online (Sandbox Code Playgroud)

但我仍然没有看到有关logback的任何改进.任何人都可以确认我做的是否正确?

log4j 2配置:

<Configuration status="INFO" debug="false">
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" />
    </Console>
</Appenders> …
Run Code Online (Sandbox Code Playgroud)

java logging log4j logback log4j2

1
推荐指数
1
解决办法
1504
查看次数

如何在运行时选择 log4j2 Appender

我使用log4j 2.9

我在 log4j2.xml 中配置了文件附加程序。

例如 :

 all_log_appender, device_appender, sql_appender
Run Code Online (Sandbox Code Playgroud)

所有附加程序都登录不同的文件。

在运行时选择我的附加程序以便决定在哪里(在哪个文件中)记录的正确方法是什么?

老实说,我在文档中找不到示例。我还尝试扩展 Logger 类,但据我了解, 扩展 log4j2 记录器类是不正确的,因为“某些布局要求 Log4j 遍历堆栈跟踪以报告记录器代码中的哪个类和行被调用”

我找不到任何如何在运行时选择附加程序的示例。

你能给我一个简单的例子吗?

java logging log4j log4j2

1
推荐指数
1
解决办法
2275
查看次数

picocli:为什么这个 JUnit 测试失败?

尝试运行 JUnit 测试错误时,测试将无法正确运行

package picocli;

import picocli.CommandLine.Option;

public class ComparatorRunnerConfig {

      @Option(names = {"-rc", "--report-class"}, required = false,
              description = "define report")
      private String report;

      public String getReport() {
            return report;
      }
}
Run Code Online (Sandbox Code Playgroud)

我的 JUnit 测试:

package picocli;

import static org.junit.Assert.*;
import org.junit.Test;

public class ConfigurationTest {

    @Test
    public void testBasicConfigOptions() {
        String args = "-rc BlahBlah";
        ComparatorRunnerConfig mfc = new ComparatorRunnerConfig();
        new CommandLine(mfc).parse(args);

        String myTestValue = mfc.getReport();
        assertEquals(myTestValue, "BlahBlah");
    }
}
Run Code Online (Sandbox Code Playgroud)

测试失败。

java picocli

-2
推荐指数
1
解决办法
823
查看次数