You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Remko Popma (JIRA)" <ji...@apache.org> on 2018/05/04 22:21:00 UTC

[jira] [Comment Edited] (SOLR-11453) Create separate logger for slow requests

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

Remko Popma edited comment on SOLR-11453 at 5/4/18 10:20 PM:
-------------------------------------------------------------

It may be easier to discuss here rather than on the log4j mailing list, so here is one idea. 

Configure log4j so that a certain named logger is associated with a separate appender. In your application code, all logging that needs to end up in the "slow requests" log file should be done using the logger with that name. 

{noformat}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Properties>
    <Property name="filename">logs/app.log</Property>
    <Property name="slowLogs">logs/app-slow.log</Property>
  </Properties>
  <Appenders>
	<File name="file" fileName="${filename}">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level [%t] %logger{36} - %msg%n"/>
    </File>
	<File name="slow" fileName="${slowLogs}">
      <PatternLayout pattern="%d %p [%t] %c{1.} %m%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Logger name="org.apache.solr.core.SolrCore.SlowRequest" level="trace">
      <AppenderRef ref="slow"/>
    </Logger>
    <Root level="info">
      <AppenderRef ref="file"/>
    </Root>
  </Loggers>
</Configuration>
{noformat}
In your application:
{code}
private final static Logger slowRequests = LogManager.getLogger("org.apache.solr.core.SolrCore.SlowRequest");
private final static Logger logger = LogManager.getLogger();

...
logger.trace("normal logging");
slowRequests.trace("a slow request just came in");
{code}

With the above configuration, all log messages sent to the {{slowRequests}} logger end up in both the log files. If you want to send the slow request log messages to the slow log file only, set {{additivity = "false"}} on the slow logger. See the [manual|https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity] for details.

{noformat}
...
  <Loggers>
    <Logger name="org.apache.solr.core.SolrCore.SlowRequest" level="trace" additivity = "false">
...
{noformat}



was (Author: remkop@yahoo.com):
It may be easier to discuss here rather than on the log4j mailing list, so here is one idea. 

Configure log4j so that a certain named logger is associated with a separate appender. In your application code, all logging that needs to end up in the "slow requests" log file should be done using the logger with that name. 

{noformat}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Properties>
    <Property name="filename">logs/app.log</Property>
    <Property name="slowLogs">logs/app-slow.log</Property>
  </Properties>
  <Appenders>
	<File name="file" fileName="${filename}">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level [%t] %logger{36} - %msg%n"/>
    </File>
	<File name="slow" fileName="${slowLogs}">
      <PatternLayout pattern="%d %p [%t] %c{1.} %m%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Logger name="org.apache.solr.core.SolrCore.SlowRequest" level="trace">
      <AppenderRef ref="slow"/>
    </Logger>
    <Root level="info">
      <AppenderRef ref="file"/>
    </Root>
  </Loggers>
</Configuration>
{noformat}
In your application:
{code}
private final static Logger slowRequests = LogManager.getLogger("org.apache.solr.core.SolrCore.SlowRequest");
private final static Logger logger = LogManager.getLogger();

...
logger.trace("normal logging");
slowRequests.trace("a slow request just came in");
{code}

With the above configuration, all log messages sent to the {{slowRequests}} logger end up in both the log files. If you want to send the slow request log messages to the slow log file only, set {{additivity = "false"}} on the slow logger. See the [manual|https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity] for details.

> Create separate logger for slow requests
> ----------------------------------------
>
>                 Key: SOLR-11453
>                 URL: https://issues.apache.org/jira/browse/SOLR-11453
>             Project: Solr
>          Issue Type: Improvement
>          Components: logging
>    Affects Versions: 7.0.1
>            Reporter: Shawn Heisey
>            Assignee: Shawn Heisey
>            Priority: Minor
>         Attachments: SOLR-11453.patch, SOLR-11453.patch, SOLR-11453.patch
>
>
> There is some desire on the mailing list to create a separate logfile for slow queries.  Currently it is not possible to do this cleanly, because the WARN level used by slow query logging within the SolrCore class is also used for other events that SolrCore can log.  Those messages would be out of place in a slow query log.  They should typically stay in main solr logfile.
> I propose creating a custom logger for slow queries, similar to what has been set up for request logging.  In the SolrCore class, which is org.apache.solr.core.SolrCore, there is a special logger at org.apache.solr.core.SolrCore.Request.  This is not a real class, just a logger which makes it possible to handle those log messages differently than the rest of Solr's logging.  I propose setting up another custom logger within SolrCore which could be org.apache.solr.core.SolrCore.SlowRequest.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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