[ 
https://issues.apache.org/jira/browse/LOG4J2-1023?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14552835#comment-14552835
 ] 

Gary Gregory edited comment on LOG4J2-1023 at 5/20/15 6:33 PM:
---------------------------------------------------------------

How about this (not tested but it compiles ;-):

{code:java}
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache license, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the license for the specific language governing permissions and
 * limitations under the license.
 */
package org.apache.logging.log4j.core.appender.rewrite;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.util.KeyValuePair;

/**
 * Rewrites levels for a given logger name.
 * 
 * @since 2.4
 */
@Plugin(name = "LevelRewritePolicy", category = "Core", elementType = 
"rewritePolicy", printObject = true)
public class LoggerNameLevelRewritePolicy implements RewritePolicy {

    @PluginFactory
    public static LoggerNameLevelRewritePolicy createPolicy(
            // @formatter:off
            @PluginAttribute("logger") final String loggerName,
            @PluginElement("LevelPair") final KeyValuePair[] levelPairs) {
            // @formatter:on
        Map<Level, Level> newMap = new HashMap<>(levelPairs.length);
        for (KeyValuePair keyValuePair : levelPairs) {
            newMap.put(getLevel(keyValuePair.getKey()), 
getLevel(keyValuePair.getValue()));
        }
        return new LoggerNameLevelRewritePolicy(loggerName, newMap);
    }

    private static Level getLevel(String name) {
        return Level.getLevel(name.toUpperCase(Locale.ROOT));
    }

    private final String loggerName;

    private final Map<Level, Level> map;

    private LoggerNameLevelRewritePolicy(String loggerName, Map<Level, Level> 
map) {
        super();
        this.loggerName = loggerName;
        this.map = map;
    }

    @Override
    public LogEvent rewrite(LogEvent event) {
        if (!event.getLoggerName().startsWith(loggerName)) {
            return event;
        }
        final Level sourceLevel = event.getLevel();
        final Level newLevel = map.get(sourceLevel);
        LogEvent result = new Log4jLogEvent(event.getLoggerName(), 
event.getMarker(), event.getLoggerFqcn(),
                newLevel == null ? sourceLevel : newLevel, event.getMessage(), 
event.getThrown(),
                event.getContextMap(), event.getContextStack(), 
event.getThreadName(), event.getSource(),
                event.getTimeMillis());

        return result;
    }

}
{code}


was (Author: garydgregory):
How about this (not tested but it compiles ;-):

{code:java}
package org.apache.logging.log4j.core.appender.rewrite;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.util.KeyValuePair;

@Plugin(name = "LevelRewritePolicy", category = "Core", elementType = 
"rewritePolicy", printObject = true)
public class LoggerNameLevelRewritePolicy implements RewritePolicy {

    @PluginFactory
    public static LoggerNameLevelRewritePolicy createPolicy(
            // @formatter:off
            @PluginAttribute("logger") final String loggerName,
            @PluginElement("LevelPair") final KeyValuePair[] levelPairs) {
            // @formatter:on
        Map<Level, Level> newMap = new HashMap<>(levelPairs.length);
        for (KeyValuePair keyValuePair : levelPairs) {
            newMap.put(getLevel(keyValuePair.getKey()), 
getLevel(keyValuePair.getValue()));
        }
        return new LoggerNameLevelRewritePolicy(loggerName, newMap);
    }

    private static Level getLevel(String name) {
        return Level.getLevel(name.toUpperCase(Locale.ROOT));
    }

    private final String loggerName;

    private final Map<Level, Level> map;

    private LoggerNameLevelRewritePolicy(String loggerName, Map<Level, Level> 
map) {
        super();
        this.loggerName = loggerName;
        this.map = map;
    }

    @Override
    public LogEvent rewrite(LogEvent event) {
        if (!event.getLoggerName().startsWith(loggerName)) {
            return event;
        }
        final Level sourceLevel = event.getLevel();
        final Level newLevel = map.get(sourceLevel);
        LogEvent result = new Log4jLogEvent(event.getLoggerName(), 
event.getMarker(), event.getLoggerFqcn(),
                newLevel == null ? sourceLevel : newLevel, event.getMessage(), 
event.getThrown(),
                event.getContextMap(), event.getContextStack(), 
event.getThreadName(), event.getSource(),
                event.getTimeMillis());

        return result;
    }

}
{code}

> New RewritePolicy for changing level of a log event
> ---------------------------------------------------
>
>                 Key: LOG4J2-1023
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1023
>             Project: Log4j 2
>          Issue Type: New Feature
>          Components: Core
>    Affects Versions: 2.3
>            Reporter: Mikael Ståldal
>              Labels: configuration
>
> It would be useful to have a RewritePolicy for changing the level of a log 
> event.
> Some 3rd party libraries log stuff on wrong level, and I would like to be 
> able to translate it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to