Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
OSGi环境中未应用Log4j2自定义插件_Log4j2 - Fatal编程技术网

OSGi环境中未应用Log4j2自定义插件

OSGi环境中未应用Log4j2自定义插件,log4j2,Log4j2,我在OSGi环境中编写了一个Log4j2自定义转换器插件,并将Log4j2与ops4j pax日志一起使用。自定义字段是tenantId,我在log4j2.xml中将其称为%tenantId。当我运行该程序时,日志被打印为{thread name}enantId 插件类 package com.test.logging.converters; @Plugin(name = "TenantIdConverter", category = "Converter") @ConverterKeys({

我在OSGi环境中编写了一个Log4j2自定义转换器插件,并将Log4j2与ops4j pax日志一起使用。自定义字段是
tenantId
,我在log4j2.xml中将其称为
%tenantId
。当我运行该程序时,日志被打印为{thread name}enantId

插件类

package com.test.logging.converters;

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

    public static TenantIdConverter newInstance(String[] options) {
        return new TenantIdConverter("tenantId", "tenantId");
    }

    @Override
    public void format(LogEvent event, StringBuilder toAppendTo) {
        toAppendTo.append(getTenantID());
    }

    public String getTenantID() {
        String tenantId = "1234";
        if (tenantId == null) {
            tenantId = "[]";
        }
        return tenantId;
    }
}
pom.xml

    <dependency>
        <groupId>org.ops4j.pax.logging</groupId>
        <artifactId>pax-logging-api</artifactId>
        <version>1.10.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.logging</groupId>
        <artifactId>pax-logging-log4j2</artifactId>
        <version>1.10.1</version>
    </dependency>

org.ops4j.pax.logging
pax日志api
1.10.1
假如
org.ops4j.pax.logging
pax-logging-log4j2
1.10.1


org.ops4j
maven pax插件
org.apache.maven.plugins
maven编译器插件
3.1
log4j插件处理器
编译
进程类
只有
org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor
log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" name="log-test" packages="com.test.logging.converters">
<Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%-5p %d [%tenantId] %c: %m%n"/>
    </Console>

<RollingFile name="RollingFile" fileName="logs/log4j2app.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%-5p %d [%tenantId] %c: %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Root level="INFO">
        <AppenderRef ref="STDOUT"/>
    </Root>
</Loggers>

%-5p%d[%tenantId]%c:%m%n
已解决

org.ops4j.pax.logging.pax-logging-log4j2
创建了一个osgi片段,并将appender放在这个片段包中

<Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host>
org.ops4j.pax.logging.pax-logging-log4j2
<Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host>