logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Remko Popma (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (LOG4J2-695) Custom Logger with restrictions on existing methods
Date Wed, 02 Jul 2014 04:57:24 GMT

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

Remko Popma edited comment on LOG4J2-695 at 7/2/14 4:56 AM:
------------------------------------------------------------

I still need to update the Generate tool for the changes made in RC2. I'll try to make time
for that this weekend. Meanwhile, if you want to do this manually, in the generated code you
need to replace AbstractLoggerWrapper with ExtendedLoggerWrapper, and the public methods should
delegate to {{logger.logIfEnabled(...)}} (not logger.log!).

For example, for the FATAL-level methods, the generated code should look like this (javadoc
omitted):
{code}
public void fatal(final Marker marker, final Message msg) {
    logger.logIfEnabled(FQCN, FATAL, marker, msg, (Throwable) null);
}
public void fatal(final Marker marker, final Message msg, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, msg, t);
}
public void fatal(final Marker marker, final Object message) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, (Throwable) null);
}
public void fatal(final Marker marker, final Object message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, t);
}
public void fatal(final Marker marker, final String message) {
    logger.logIfEnabled(FQCN, FATAL, marker, message,(Throwable) null);
}
public void fatal(final Marker marker, final String message, final Object... params) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, params);
}
public void fatal(final Marker marker, final String message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, t);
}
public void fatal(final Message msg) {
    logger.logIfEnabled(FQCN, FATAL, null, msg, (Throwable) null);
}
public void fatal(final Message msg, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, msg, t);
}
public void fatal(final Object message) {
    logger.logIfEnabled(FQCN, FATAL, null, message, (Throwable) null);
}
public void fatal(final Object message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, message, t);
}
public void fatal(final String message) {
    logger.logIfEnabled(FQCN, FATAL, null, message, (Throwable) null);
}
public void fatal(final String message, final Object... params) {
    logger.logIfEnabled(FQCN, FATAL, null, message, params);
}
public void fatal(final String message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, message, t);
}
{code}

UPDATE: I've added a comment to LOG4J2-519 with a fix for the Generate class to generate the
above code. You can manually patch the Generate class before generating your code to get the
above result.


was (Author: remkop@yahoo.com):
I still need to update the Generate tool for the changes made in RC2. I'll try to make time
for that this weekend. Meanwhile, if you want to do this manually, in the generated code you
need to replace AbstractLoggerWrapper with ExtendedLoggerWrapper, and the public methods should
delegate to {{logger.logIfEnabled(...)}} (not logger.log!).

For example, for the FATAL-level methods, the generated code should look like this (javadoc
omitted):
{code}
public void fatal(final Marker marker, final Message msg) {
    logger.logIfEnabled(FQCN, FATAL, marker, msg, (Throwable) null);
}
public void fatal(final Marker marker, final Message msg, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, msg, t);
}
public void fatal(final Marker marker, final Object message) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, (Throwable) null);
}
public void fatal(final Marker marker, final Object message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, t);
}
public void fatal(final Marker marker, final String message) {
    logger.logIfEnabled(FQCN, FATAL, marker, message,(Throwable) null);
}
public void fatal(final Marker marker, final String message, final Object... params) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, params);
}
public void fatal(final Marker marker, final String message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, marker, message, t);
}
public void fatal(final Message msg) {
    logger.logIfEnabled(FQCN, FATAL, null, msg, (Throwable) null);
}
public void fatal(final Message msg, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, msg, t);
}
public void fatal(final Object message) {
    logger.logIfEnabled(FQCN, FATAL, null, message, (Throwable) null);
}
public void fatal(final Object message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, message, t);
}
public void fatal(final String message) {
    logger.logIfEnabled(FQCN, FATAL, null, message, (Throwable) null);
}
public void fatal(final String message, final Object... params) {
    logger.logIfEnabled(FQCN, FATAL, null, message, params);
}
public void fatal(final String message, final Throwable t) {
    logger.logIfEnabled(FQCN, FATAL, null, message, t);
}
{code}

> Custom Logger with restrictions on existing methods
> ---------------------------------------------------
>
>                 Key: LOG4J2-695
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-695
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: API
>            Reporter: SIBISH BASHEER
>              Labels: customlogger
>         Attachments: AppAsyncMain.java, CustomLogger.java, CustomLogger.java
>
>
> I have been looking at the Custom/Extended logger discussions. But none of them seems
to fulfil what i am looking for.
> 1) I want custom methods as below:
> {code}
>     private static CustomLogger logger = CustomLogger.getLogger(AppAsyncMain.class);
>    
>     logger.info( transaction_id, app_name + event_name +
> 					"inside the loop" + "inside the loop of the sample app" +
> 					"success" + "looped in" + "loop_count" +
> 					String.valueOf(i));
> {code}
> 					
> 	log:
> {code}
> 2014-06-30 16:09:28,268 log_level="INFO" thread_name="main" class_name="com.custom.samplelog4j.AppAsyncMain"
transaction_id="79ea1071-9565-405a-aa18-75d271694bf2" event_id="dd5c69c0-4400-41fd-8a2e-5d538d8e8c9b"
app="Sample Logging SDK App" event_name="Sample Event" action="start of sample app" desc="start
of api" result="success" reason="start" token="abcdefg" alias="abc@gmail.com" 
> {code}
> 	
> 2) I want to show warning in existing logger methods so the teams using the custom logger
doesn't use these methods other than for testing:
> {code}
>    logger.info("start of statement");
> {code}
>    
>    log:
> {code}
>    2014-06-30 16:12:31,065 log_level="INFO" thread_name="main" class_name="com.custom.samplelog4j2.AppAsyncMain"
start of statement  customlogger_warning="method not recommended for production use" 
> {code}
>    
> 3) Custom validations for the fields:
> {code}
>     	private static String validateFields(String app_name, String event_name,
> 			String action, String desc, Result result, String reason) {
> 		String validateStatus = "";
> 		if (!ValidateAppName(app_name)) {
> 			validateStatus = "app_name";
> 		} else if (!ValidateEventName(event_name)) {
> 			validateStatus = "event_name";
> 		} else if (!ValidateAction(action)) {
> 			validateStatus = "action";
> 		} else if (!ValidateDesc(desc)) {
> 			validateStatus = "desc";
> 		} else if (!ValidateReason(result, reason)) {
> 			validateStatus = "reason";
> 		}
> 		return validateStatus;
> 	}
> {code}
> Options tried:
> 1.
> * extended ExtendedLoggerWrapper
> * created the map of the Custom logger
> * This option was failing because of "writing to a closed appender"
> * Attached is the code "CustomLogger.java"
>    
> 2. Modified the AbstractLogger in Trunk and added the below methods:
> {code}
>       @Override
>     public void info(final String message) {
>     String updtMessage = message + " amexlogger_error=\"Incorrect method used\"";
>         logIfEnabled(FQCN, Level.INFO, null, updtMessage, (Throwable) null);
>     }
>  public void info(final String transactionId, final String app_name, final String event_name,
final String action, final String desc, final String result, final String reason, final String...
moreFields) { 
>        String message = "transaction_id=" + transactionId + " " + "app_name=" + app_name
+ " " + "event_name=" + event_name + " " + "action=" + action;
>  
>         logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
>     }
> {code}
> 	I don't want to modify the methods inside the log4j-api. 
> 	
> Please help me with the correct approach on how to use log4j2 for this usecase.
> Thanks
> Sibish



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message