[prev in list] [next in list] [prev in thread] [next in thread] 

List:       logback-user
Subject:    [logback-user] Multiple FileAppenders writing to single file no longer working in Logback 1.2.3
From:       John Morton <jtmorton () calpoly ! edu>
Date:       2018-12-20 3:14:58
Message-ID: BYAPR08MB4406F7F2A032C85BB07CFC4FDFBF0 () BYAPR08MB4406 ! namprd08 ! prod ! outlook ! com
[Download RAW message or body]

Hello there Logback users. An application I’m responsible uses logback for its \
internal logging. It logs to various files at various levels. I’ve extended it \
successfully to reformat certain log messages and save them into a new log called \
“combined-audit.log”. This is all within a single JVM, logging to a file on a local \
filesystem.

The reason for the three loggers/appenders is that I want to log from three different \
packages, at different levels, filter each differently, and encode each differently. \
This is all necessary because I cannot make changes to the app itself, so I’m trying \
to use Logback to accomplish my needs.

The below configuration works in Logback 1.1.3 and not in Logback 1.2.3.

In Logback 1.2.3, only messages from one of the three loggers are logged to the \
single file. When I change the file name to three different files, messages from each \
logger are in each file.

I read through release notes from 1.1.3 to 1.2.3 and nothing jumped out at me as \
having the potential to change this behavior.

Is this a supported configuration in 1.2.3? Does anyone have any ideas for how to \
accomplish the objective?

<!-- Appends app audit messages to combined audit log -->
<appender name="COMBINED_AUDIT" class="ch.qos.logback.core.FileAppender">
    <File>${logging.directory}/combined-audit.log</File>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <charset>UTF-8</charset>
        <Pattern>%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}||%msg%n</Pattern>
  </encoder>
</appender>

<logger name="j.k.l" level="ALL" additivity="false">
    <appender-ref ref="COMBINED_AUDIT"/>
</logger>

<!-- Appends LDAP auth messages to combined audit log -->
<appender name="COMBINED_LDAP" class="ch.qos.logback.core.FileAppender">
    <File>${logging.directory}/combined-audit.log</File>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <charset>UTF-8</charset>
        <Pattern>%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}|%replace(%replace(%replace(%msg){'^.*resultCode=',''}){',.*identifier=','|'}){', \
context=.*$',''}|LDAP|||%n</Pattern>  </encoder>

    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <expression>return message.contains("authenticate \
response=");</expression>  </evaluator>
        <OnMatch>ACCEPT</OnMatch>
        <OnMismatch>DENY</OnMismatch>
    </filter>
</appender>

<logger name="a.b.c.d" level="DEBUG" additivity="false">
    <appender-ref ref="COMBINED_LDAP"/>
</logger>

<!-- Appends LDAP invalid username messages to combined audit log -->
<appender name="COMBINED_INVALID_USERNAME" class="ch.qos.logback.core.FileAppender">
    <File>${logging.directory}/combined-audit.log</File>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <charset>UTF-8</charset>
        <Pattern>%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}|INVALID_USERNAME||LDAP|||%n</Pattern>
  </encoder>

    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <expression>return message.contains("failed using filter=");</expression>
        </evaluator>
        <OnMatch>ACCEPT</OnMatch>
        <OnMismatch>DENY</OnMismatch>
    </filter>
</appender>

<logger name="v.w.x.y.z" level="INFO" additivity="false">
    <appender-ref ref="COMBINED_INVALID_USERNAME"/>
</logger>


[Attachment #3 (text/html)]

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> Hello there Logback users. An \
application I’m responsible uses logback for its internal logging. It logs to various \
files at various levels. I’ve extended it successfully to reformat certain log \
messages and save them into a new log called “combined-audit.log”.  This is all \
within a single JVM, logging to a file on a local filesystem.<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> The reason for the three \
loggers/appenders is that I want to log from three different packages, at different \
levels, filter each differently, and encode each differently. This is all necessary \
because I cannot make changes to the app itself, so I’m trying to  use Logback to \
accomplish my needs.<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> The below configuration works in \
Logback 1.1.3 and not in Logback 1.2.3. <br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> In Logback 1.2.3, only messages from \
one of the three loggers are logged to the single file. When I change the file name \
to three different files, messages from each logger are in each file. <br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> I read through release notes from 1.1.3 \
to 1.2.3 and nothing jumped out at me as having the potential to change this \
behavior. <br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> Is this a supported configuration in \
1.2.3? Does anyone have any ideas for how to accomplish the objective?<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;!-- Appends app audit messages to \
combined audit log --&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;appender \
name=&quot;COMBINED_AUDIT&quot; \
class=&quot;ch.qos.logback.core.FileAppender&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; \
&lt;File&gt;${logging.directory}/combined-audit.log&lt;/File&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;encoder \
class=&quot;ch.qos.logback.classic.encoder.PatternLayoutEncoder&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;charset&gt;UTF-8&lt;/charset&gt;<br> \
</div> <div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;Pattern&gt;%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}||%msg%n&lt;/Pattern&gt;<br>
 </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;/encoder&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/appender&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;logger name=&quot;j.k.l&quot; \
level=&quot;ALL&quot; additivity=&quot;false&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;appender-ref \
ref=&quot;COMBINED_AUDIT&quot;/&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/logger&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;!-- Appends LDAP auth messages to \
combined audit log --&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;appender \
name=&quot;COMBINED_LDAP&quot; \
class=&quot;ch.qos.logback.core.FileAppender&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; \
&lt;File&gt;${logging.directory}/combined-audit.log&lt;/File&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;encoder \
class=&quot;ch.qos.logback.classic.encoder.PatternLayoutEncoder&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;charset&gt;UTF-8&lt;/charset&gt;<br> \
</div> <div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;Pattern&gt;%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}|%replace(%replace(%replace(%msg){'^.*resultCode=',''}){',.*identifier=','|'}){', \
context=.*$',''}|LDAP|||%n&lt;/Pattern&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;/encoder&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;filter \
class=&quot;ch.qos.logback.core.filter.EvaluatorFilter&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;evaluator&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;expression&gt;return message.contains(&quot;authenticate \
response=&quot;);&lt;/expression&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/evaluator&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OnMatch&gt;ACCEPT&lt;/OnMatch&gt;<br> \
</div> <div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;OnMismatch&gt;DENY&lt;/OnMismatch&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/appender&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;logger name=&quot;a.b.c.d&quot; \
level=&quot;DEBUG&quot; additivity=&quot;false&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;appender-ref \
ref=&quot;COMBINED_LDAP&quot;/&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/logger&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;!-- Appends LDAP invalid username \
messages to combined audit log --&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;appender \
name=&quot;COMBINED_INVALID_USERNAME&quot; \
class=&quot;ch.qos.logback.core.FileAppender&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; \
&lt;File&gt;${logging.directory}/combined-audit.log&lt;/File&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;encoder \
class=&quot;ch.qos.logback.classic.encoder.PatternLayoutEncoder&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;charset&gt;UTF-8&lt;/charset&gt;<br> \
</div> <div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;Pattern&gt;%date{ISO8601}|%mdc{m.remote_addr}|%mdc{m.jsessionid}|INVALID_USERNAME||LDAP|||%n&lt;/Pattern&gt;<br>
 </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;/encoder&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; <br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp;&nbsp;&lt;filter \
class=&quot;ch.qos.logback.core.filter.EvaluatorFilter&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;evaluator&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;expression&gt;return message.contains(&quot;failed using \
filter=&quot;);&lt;/expression&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/evaluator&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OnMatch&gt;ACCEPT&lt;/OnMatch&gt;<br> \
</div> <div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;OnMismatch&gt;DENY&lt;/OnMismatch&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/appender&gt;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;logger name=&quot;v.w.x.y.z&quot; \
level=&quot;INFO&quot; additivity=&quot;false&quot;&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &nbsp;&nbsp;&nbsp; &lt;appender-ref \
ref=&quot;COMBINED_INVALID_USERNAME&quot;/&gt;<br> </div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: \
sans-serif; font-size: 11pt; color: black; "> &lt;/logger&gt;<br>
<br>
<br>
</div>
</body>
</html>


[Attachment #4 (unknown)]

_______________________________________________
logback-user mailing list
logback-user@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic