Log4j2 自定义布局模式

2024-01-03

您好,我正在从 log4j 迁移到 log4j2。

在我的代码中,我发现使用了一些自定义模式类。我不确定如何在 log4j2 中实现相同的功能。 有人能帮我解决这个问题吗?

这是我正在使用的代码

public class MyPatternLayout extends PatternLayout
{
    protected PatternParser createPatternParser(String pattern)
    {
        return new MyPatternParser(pattern);
    }
}

public class MyPatternParser extends PatternParser
{
    private static class MyPatternConverter extends PatternConverter
    {

        int type = 0;

        public String convert(LoggingEvent event)
        {
            String converted = "";
            try
            {
                switch (type)
                {
                    case 33: // 'I' - Requiest Unique ID
                        UniqueId id = (UniqueId) ActParam.getParameter(LoggerParams.activityId);
                        if (id == null)
                        {
                            id = new UniqueId();
                            ActParam.setParameter(LoggerParams.activityId, id);
                        }
                        converted = id.getId();
                        break;
                }
            }
            catch (Exception ex)
            {
                LogLog.error("Error processing activityId.", ex);
            }
            return converted;
        }

        MyPatternConverter(FormattingInfo formattingInfo, int type)
        {
            super(formattingInfo);
            this.type = type;
        }
    }

    public MyPatternParser(String pattern)
    {
        super(pattern);

    }

    protected void finalizeConverter(char c)
    {
        PatternConverter pc = null;
        switch (c)
        {
            case 33: 
            case 53: 
                pc = new MyPatternConverter(formattingInfo, c);
                currentLiteral.setLength(0);

                addConverter(pc);
                break;
            default:
                super.finalizeConverter(c);
                break;
        }

    }

}

提前致谢。

在建议更改为@plugins之后,下面是我的代码。

@Plugin(name = "MyPatternLayout", category = "Converter")
@ConverterKeys(
{
        "zs"
})
public class MyPatternLayout extends LogEventPatternConverter
{
    protected MyPatternLayout(String name, String style)
    {
        super(name, style);
    }

    public static MyPatternLayout newInstance(String[] options)
    {
        return new MyPatternLayout("zs", Thread.currentThread().getName());
    }

    @Override
    public void format(LogEvent event, StringBuilder toAppendTo)
    {

        toAppendTo.append(getTransactionId());
    }
    protected String getTransactionId()
    {

        String converted = "";
        try
        {
             UniqueId id = (UniqueId) ThreadParameter.getParameter(LoggerThreadParameters.activityId);
            if (id == null)
            {
                id = new UniqueId();
                ThreadParameter.setParameter(LoggerThreadParameters.activityId, id);
            }
            converted = id.getId();

        }
        catch (Exception ex)
        {

            StatusLogger.getLogger().error("Error processing activityId.", ex);
        }
        return converted;
    }

}

log4j2.xml 是:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration status="trace" packages="com.metavante.efd.cms.log.log4j.EFDPatternLayout">
       <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
     <PatternLayout pattern="%p|%d{ISO8601}|%c|%m|%zs%n"/>

    </Console>
  </Appenders>
  <loggers>
     <Logger name="org.apache.log4j.xml" level="all" />
     <root level="all">
            <appender-ref ref="STDOUT" level="TRACE" />
      </root>
  </loggers>
</configuration>

日志中的输出如下所示。

2017-07-06 10:55:32,137 main DEBUG Initializing configuration XmlConfiguration[location=C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml]
2017-07-06 10:55:32,152 main DEBUG Installed script engines
2017-07-06 10:55:32,652 main DEBUG Oracle Nashorn Version: 1.8.0_121, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
2017-07-06 10:55:32,659 main DEBUG Took 0.005574 seconds to load 0 plugins from package com.log4j.MyPatternLayout
2017-07-06 10:55:32,659 main DEBUG PluginManager 'Core' found 112 plugins
2017-07-06 10:55:32,659 main DEBUG PluginManager 'Level' found 0 plugins
2017-07-06 10:55:32,665 main DEBUG PluginManager 'Lookup' found 13 plugins
2017-07-06 10:55:32,668 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-07-06 10:55:32,686 main TRACE TypeConverterRegistry initializing.
2017-07-06 10:55:32,687 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2017-07-06 10:55:32,708 main DEBUG PatternLayout$Builder(pattern="%p|%d{ISO8601}|%c|%m|%zs%n", PatternSelector=null, Configuration(C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-07-06 10:55:32,709 main DEBUG PluginManager 'Converter' found 41 plugins
2017-07-06 10:55:32,733 main ERROR Unrecognized format specifier [zs]
2017-07-06 10:55:32,734 main ERROR Unrecognized conversion specifier [zs] starting at position 24 in conversion pattern.
2017-07-06 10:55:32,734 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2017-07-06 10:55:32,748 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%p|%d{ISO8601}|%c|%m|%zs%n), name="STDOUT", Configuration(C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml), Filter=null)
2017-07-06 10:55:32,758 main DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2017-07-06 10:55:32,758 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2017-07-06 10:55:32,759 main DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2017-07-06 10:55:32,761 main DEBUG createAppenders(={STDOUT})
2017-07-06 10:55:32,762 main DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
2017-07-06 10:55:32,771 main DEBUG createLogger(additivity="true", level="ALL", name="org.apache.log4j.xml", includeLocation="null", ={}, ={}, Configuration(C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml), Filter=null)
2017-07-06 10:55:32,776 main DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-07-06 10:55:32,777 main DEBUG createAppenderRef(ref="STDOUT", level="TRACE", Filter=null)
2017-07-06 10:55:32,777 main DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2017-07-06 10:55:32,778 main DEBUG createLogger(additivity="null", level="ALL", includeLocation="null", ={STDOUT}, ={}, Configuration(C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml), Filter=null)
2017-07-06 10:55:32,779 main DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2017-07-06 10:55:32,781 main DEBUG createLoggers(={org.apache.log4j.xml, root})
2017-07-06 10:55:32,783 main DEBUG Configuration XmlConfiguration[location=C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml] initialized
2017-07-06 10:55:32,783 main DEBUG Starting configuration XmlConfiguration[location=C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml]
2017-07-06 10:55:32,784 main DEBUG Started configuration XmlConfiguration[location=C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml] OK.
2017-07-06 10:55:32,784 main TRACE Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@51931956...
2017-07-06 10:55:32,785 main TRACE DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped.
2017-07-06 10:55:32,785 main TRACE DefaultConfiguration stopping root LoggerConfig.
2017-07-06 10:55:32,785 main TRACE DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped.
2017-07-06 10:55:32,786 main TRACE DefaultConfiguration stopping remaining Appenders.
2017-07-06 10:55:32,786 main DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2017-07-06 10:55:32,786 main DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2017-07-06 10:55:32,786 main DEBUG Appender DefaultConsole-1 stopped with status true
2017-07-06 10:55:32,787 main TRACE DefaultConfiguration stopped 1 remaining Appenders.
2017-07-06 10:55:32,787 main TRACE DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
2017-07-06 10:55:32,787 main DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@51931956 OK
2017-07-06 10:55:32,790 main TRACE Reregistering MBeans after reconfigure. Selector=org.apache.logging.log4j.core.selector.ClassLoaderContextSelector@71c27ee8
2017-07-06 10:55:32,790 main TRACE Reregistering context (1/1): '18b4aac2' org.apache.logging.log4j.core.LoggerContext@3e7dd664
2017-07-06 10:55:32,791 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2'
2017-07-06 10:55:32,791 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger'
2017-07-06 10:55:32,792 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector'
2017-07-06 10:55:32,792 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*'
2017-07-06 10:55:32,793 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=*'
2017-07-06 10:55:32,793 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncAppenders,name=*'
2017-07-06 10:55:32,794 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncLoggerRingBuffer'
2017-07-06 10:55:32,794 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*,subtype=RingBuffer'
2017-07-06 10:55:32,799 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2
2017-07-06 10:55:32,802 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger
2017-07-06 10:55:32,805 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector
2017-07-06 10:55:32,807 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=
2017-07-06 10:55:32,808 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=org.apache.log4j.xml
2017-07-06 10:55:32,812 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=STDOUT
2017-07-06 10:55:32,818 main TRACE Using default SystemClock for timestamps.
2017-07-06 10:55:32,819 main TRACE Using DummyNanoClock for nanosecond timestamps.
2017-07-06 10:55:32,819 main DEBUG Reconfiguration complete for context[name=18b4aac2] at URI C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\xml\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@3e7dd664) with optional ClassLoader: null
2017-07-06 10:55:32,820 main DEBUG Shutdown hook enabled. Registering a new one.
2017-07-06 10:55:32,822 main DEBUG LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@3e7dd664] started OK.
DEBUG|2017-07-06T10:55:32,836|Default.com.JBossStartupClass|deleting directory: C:\eclipse\workspace\test\test.ear\test.war\WEB-INF\templates|%zs
2017-07-06 10:55:32,843 main DEBUG AsyncLogger.ThreadNameStrategy=CACHED
2017-07-06 10:55:32,843 main TRACE Using default SystemClock for timestamps.

我认为不知何故它没有找到该插件。请帮我。 注意:我正在使用 JBoss EAP 7。

当我使用 log4j2.properties 文件而不是 log2j.xml 时,它会在日志中给出不同的错误。

name=PropertiesConfig
property.filename =logs
appenders =console
appender.console.type =Console
appender.console.name =STDOUT
appender.console.layout.type =com.log4j.MyPatternLayout
appender.console.layout.pattern =%p|%d{ISO8601}|%c|%m|%zs%n

rootLogger.level =debug
rootLogger.appenderRefs =stdout
rootLogger.appenderRef.stdout.ref =STDOUT

下面是我使用 .proeprties 文件时控制台中的日志。

2017-07-06 11:02:48,374 main ERROR Unable to locate plugin type for com.metavante.efd.cms.log.log4j.EFDPatternLayout
2017-07-06 11:02:48,433 main ERROR Unable to locate plugin for com.metavante.efd.cms.log.log4j.EFDPatternLayout
2017-07-06 11:02:48,455 main ERROR Unable to inject fields into builder class for plugin type class org.apache.logging.log4j.core.appender.ConsoleAppender, element Console. java.lang.NullPointerException
    at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.findNamedNode(PluginElementVisitor.java:103)
    at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.visit(PluginElementVisitor.java:87)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:179)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
    at com.metavante.efd.util.logging.logStore.types.Log4jLogStore.<init>(Log4jLogStore.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.metavante.efd.util.logging.LoggerProperties.getLogStore(LoggerProperties.java:148)
    at com.metavante.efd.util.logging.Logger.getLogStoreInstance(Logger.java:97)
    at com.metavante.efd.util.logging.Logger.debug(Logger.java:155)
    at com.fis.customAgent.local.JBoss_Startup_Agent.cleanDirectories(JBoss_Startup_Agent.java:220)
    at com.fis.customAgent.local.JBoss_Startup_Agent.premain(JBoss_Startup_Agent.java:182)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)

2017-07-06 11:02:48,461 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console. java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.ConsoleAppender
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
    at com.metavante.efd.util.logging.logStore.types.Log4jLogStore.<init>(Log4jLogStore.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.metavante.efd.util.logging.LoggerProperties.getLogStore(LoggerProperties.java:148)
    at com.metavante.efd.util.logging.Logger.getLogStoreInstance(Logger.java:97)
    at com.metavante.efd.util.logging.Logger.debug(Logger.java:155)
    at com.fis.customAgent.local.JBoss_Startup_Agent.cleanDirectories(JBoss_Startup_Agent.java:220)
    at com.fis.customAgent.local.JBoss_Startup_Agent.premain(JBoss_Startup_Agent.java:182)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)

2017-07-06 11:02:48,463 main ERROR Null object returned for Console in Appenders.
2017-07-06 11:02:48,464 main ERROR Unable to locate appender "STDOUT" for logger config "root"

请帮助我。谢谢。


最好的起点是Log4j2源代码 https://logging.apache.org/log4j/2.x/log4j-core/xref/index.html。模式转换器生活在org.apache.logging.log4j.core.pattern包裹。一个漂亮而简单的独立转换器是Uuid模式转换器 https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/pattern/UuidPatternConverter.html.

另请参阅此答案显示自定义 pid 模式转换器 https://stackoverflow.com/a/43427618/1446916.

关键点:

  1. 无需扩展 PatternLayout 或 PatternParser
  2. 相反,延长日志事件模式转换器 https://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.html
  3. Log4j2 使用插件机制来扩展其功能。内置的 PatternConverters 也是插件。
  4. 请参阅 Log4j2文档 https://logging.apache.org/log4j/2.x/manual/extending.html#PatternConverters关于自定义 PatternConverter 插件注释
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4j2 自定义布局模式 的相关文章

  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐