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 自定义布局模式 的相关文章

  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 使用 Spring 控制器处理错误 404

    I use ExceptionHandler处理我的网络应用程序抛出的异常 在我的例子中我的应用程序返回JSON回应HTTP status用于对客户端的错误响应 但是 我正在尝试弄清楚如何处理error 404返回与处理的类似的 JSON
  • 在哪里保存选项值、重要文件的路径等[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个程序 需要设置一些选项值以及图像文件的一些路径 SQLite 数据库的路径 有关各种按钮上文本的一些信息 有关要使用哪个数据库的信
  • 无法访问“不安全”java方法的java表达式语言

    我正在开发一个项目 让用户向服务器提交小 脚本 然后我将执行这些脚本 有很多脚本语言可以嵌入到Java程序中 例如mvel ognl uel clojure rhino javascript等 但是 据我所知 它们都允许脚本编写者调用Jav
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • JUnit5 平台启动器 API - 如果没有至少一个测试引擎,则无法创建启动器

    我正在尝试升级我们的自动化测试套件的测试能力以接受 JUnit5 测试并遵循JUnit 平台启动器 API 说明 https junit org junit5 docs current user guide launcher api我收到错
  • 如何在 MSSQL 中获取 CURRENT_DATE?

    我正在使用 jpa 3 o 和 Hibernate 我有一个命名查询 SELECT COUNT wt id FROM WPSTransaction wt WHERE wt createdDate gt CURRENT DATE WPSTra
  • 纱线上的火花,连接到资源管理器 /0.0.0.0:8032

    我正在我的开发机器 Mac 上编写 Spark 程序 hadoop的版本是2 6 spark的版本是1 6 2 hadoop集群有3个节点 当然都在linux机器上 我在idea IDE中以spark独立模式运行spark程序 它运行成功
  • 正确签名的 JNLP 应用程序无法在 Java 7 中运行

    我有一个 JNLP 应用程序 由于证书过期需要更新 我有一个经过 CA 验证的新证书 我已将新证书导入到我的密钥库中 我已导入完整的证书链 我的构建文件对构建中的 jar 进行签名和时间戳
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • 为什么无法从 WEB-INF 文件夹内加载 POSModel 文件?

    我在我的 Web 项目中使用 Spring MVC 我将模型文件放在 WEB INF 目录中 String taggerModelPath WEB INF lib en pos maxent bin String chunkerModelP
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 使用 PC/SC 读卡器验证 Ultralight EV1

    我在尝试使用 Java 中的 PC SC 读卡器 特别是 ACR1222L 验证 Ultralight EV1 卡时遇到问题 我能够使用 ISO 14443 3 标签的相应 APDU 在不受保护的标签上进行写入和读取 但是 我找不到运行 P
  • 如何制作一个makefile只用于编译一些java文件?

    我有三个java文件 名为A java B java C java A将创建对象B B将创建对象C 但我以前从未构建过makefile 有谁可以帮我构建一个 makefile 来编译这三个 java 文件吗 我应该使用什么工具来制作 mak
  • 如何从 JavaFX 中的另一个控制器类访问 UI 元素?

    我有一个使用 NetBeans 8 编写的 JavaFX Java 8 应用程序 没有SceneBuilder 我的应用程序有一个主窗口 该窗口有自己的 FXML 文件 primary fxml 和自己的控制器类 FXMLPrimaryCo
  • Collections.sort(list) 和 list.sort(Comparator) 之间的区别

    有什么理由让我应该选择Collections sort list 方法而不是简单地调用list sort 内部Collections sort只是调用sort的方法List无论如何 上课 令人惊讶的是几乎每个人都告诉我使用Collectio
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • 如何建立与 FileZilla Server 1.2.0 的 FTPS 数据连接

    使用 Apache commons net 的 Java FTPSClient 进行会话恢复是一个已知问题 会话恢复是 FTPS 服务器数据连接所需的一项安全功能 Apache FTPSClient 不支持会话恢复 并且 JDK API 使

随机推荐