1

I wanted to use multiple logger on single appender.

Suppose i have 3 different logger for 3 different library i use in my project.

But i want to put all log of those library in single file. which is not working right now.

I looked at below stackoverflow question but i couldn't do same in Java( this question is answered for grails )

Using multiple loggers on a single appender

Here is my log4j.xml file :-

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="${log.file}" />
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="20"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender" >
        <param name="BufferSize" value="500000"/>
        <param name="Blocking" value="false"/>
        <appender-ref ref="fileAppender"/>
    </appender>
    <logger name="ABCDEF" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="fileAppender"/>
    </logger>
    <logger name="GHIJKLM" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="ASYNC"/>
    </logger>
    <logger name="NOPQURST" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="ASYNC"/>
    </logger>
</log4j:configuration>

So how to do in Java?

NOTE :-

I cannot move to other logging like slf4j.

After sinclair's comment :-

What is the significance of log4j.rootLogger property in log4j.properties file. What happens if i don't use this property?

This question explains about root logger . I want to make one custom appender for entire application which can be used by multple loggers.

EDIT 2

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
        <!-- The active file to log to -->
        <param name="file" value="${log.file}" />
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />
        <!-- Max File Size 50MB-->
        <param name="MaxFileSize" value="50MB"/>
        <!-- Keep 20 backup files -->
        <param name="MaxBackupIndex" value="20"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- The log message pattern -->
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender" >
        <param name="BufferSize" value="500000"/>
        <param name="Blocking" value="false"/>
        <appender-ref ref="fileAppender"/>
    </appender>
    <appender name="customAppender" class="org.apache.log4j.AsyncAppender">
        <appender-ref ref="fileAppender" />
    </appender>
    <logger name="com.company.project" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="customAppender"/>
    </logger>
    <logger name="org.jboss.netty" additivity="false">
        <level value="INFO" />
        <appender-ref ref="customAppender" />
    </logger>
    <root>
        <priority value="INFO" />
        <appender-ref ref="consoleAppender" />
    </root>
</log4j:configuration>

This the file i am using... Still any error or exception related to org.jboss.netty will go in out file not logfile.

Any more help????

Community
  • 1
  • 1
mihir6692
  • 177
  • 1
  • 4
  • 19
  • You still have to declare the root logger. I guess "does not work" means it is not logging anything right now? – Fildor Dec 17 '15 at 11:28
  • @Fildor Logging is working only if i use `fileAppender` (for `logger=ABCDEF`and that too work for only first one. because log4j can't write to one file from multiple logger because of sync issue. – mihir6692 Dec 17 '15 at 11:37
  • @sinclair look at this link https://www.liferay.com/community/forums/-/message_boards/message/48322836 – mihir6692 Dec 17 '15 at 11:37
  • @fildor look at this link :- https://www.liferay.com/community/forums/-/message_boards/message/48322836 – mihir6692 Dec 17 '15 at 11:38
  • I don't understand what what it is trying to convey – mihir6692 Dec 17 '15 at 11:39
  • There is no sync issue. You are missing the root logger ... The article says more than 1 **appender** cannot write to the same file. Multiple Loggers **can** use the same appender, though. – Fildor Dec 17 '15 at 11:43
  • ok. so if i write root logger and then two different custom logger , i can write both custom logger to same file while writing root logger to `out` file. is that what is means? – mihir6692 Dec 17 '15 at 11:49
  • Try it out. I'm sure it will solve your problem. Maybe you'll have to make some adjustments to fully meet your requirements. – Fildor Dec 17 '15 at 12:05
  • @fildor i tried it , any input you can give about my EDIT 2 ??? – mihir6692 Dec 17 '15 at 12:47
  • No, sorry. I don't know how netty is handling its logging. – Fildor Dec 17 '15 at 13:15
  • ok... i tried with different librarys too Quartz etc.. but same result – mihir6692 Dec 17 '15 at 13:30

0 Answers0