2017-06-02 10 views
0

Extending Log4j2Create Custom Pattern using log4j2 in javaの例を試しましたが、ログに2つのフィールドを追加します。これを得るために私は何をする必要がありますか?あなたがログにそのデータを提供する二つの別々のコンバータを作成することができます例時間名前をいくつかのフィールドをしたい場合はJava Log4j2コンバータカテゴリプラグインログに複数のカスタムフィールドを追加

+1

? – lucasvw

答えて

1

は、このマニュアルhttps://logging.apache.org/log4j/log4j-2.2/manual/plugins.html#Converters

を参照してください。例えば

あなたはMyNamePatternConverterを持って、ここでは別名whatIsMyNameがmyNameを提供することができます。ログパターンでは、それらのいずれかを使用できます。

@Plugin(name="MyNamePatternConverter", category = PatternConverter.CATEGORY) 
@ConverterKeys(value = {"whatIsMyName", "myName"}) 
public class MyNameConverter extends LogEventPatternConverter { 

    protected MyNameConverter(String name, String style) { 
     super(name, style); 
    } 

    public static MyNameConverter newInstance(String[] options) { 
     return new MyNameConverter("My name Converter", "name"); 
    } 

    public void format(LogEvent event, StringBuilder toAppendTo) { 
     toAppendTo.append("Yuriy"); 
    } 
} 

TimePatternConverterは

@Plugin(name = "TimePatternConverter", category = PatternConverter.CATEGORY) 
@ConverterKeys(value = {"timeIsNow", "timeNow", "now"}) 
public class TimeConverter extends LogEventPatternConverter { 
    protected TimeConverter(String name, String style) { 
     super(name, style); 
    } 

    public static TimeConverter newInstance(String[] options) { 
     return new TimeConverter("Time Converter", "now"); 
    } 

    public void format(LogEvent logEvent, StringBuilder toAppendTo) { 
     toAppendTo.append(new SimpleDateFormat("HH:mm").format(new Date())); 
    } 
} 

我々はコンバータと呼ばれる別のパッケージでそれら2を配置します。

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
       status="OFF" packages="converters"> 
    <Appenders> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="Time is now %timeIsNow and my name is %whatIsMyName, %m%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="org.apache.log4j.xml" level="all" /> 
     <Root level="all"> 
      <AppenderRef ref="STDOUT" /> 
     </Root> 
    </Loggers> 
</Configuration> 

log4j2.xmlを提供します。

サンプルのメインクラスを作成してテストします。

public class Main { 
    private static final Logger logger = LogManager.getLogger(ResolverUtil.Test.class); 
    public static void main(String[] args) { 
     logger.info("Hello log4j2"); 
     logger.debug("This is debug message"); 
    } 
} 

これは、このような出力を生成します:

コードは、あなたがこれまでに試しただし、どのようなフィールドを追加したいん
Time is now 20:40 and my name is Yuriy, Hello log4j2 
Time is now 20:40 and my name is Yuriy, This is debug message 
+0

私は2つのフィールド(ConsoleAppender、RollingFileAppenderなど)が必要な4つのカスタムアペンダーを持っています。それは2 * 4 = 8プラグインを書く必要があるのでしょうか、各フィールドごとに2つ書くだけで再利用できますか? –

+0

もちろん、2つのコンバーター(TimeConverter、NameConverter)をお持ちの場合は、すべてのカスタムアペンダーにこれらの2つのフィールドが提供されます。 – yvoytovych

+0

ありがとう! –

関連する問題