java - Using Log4J 1.*, how can I write two packages to two separate files? -
i have following 2 packages:
com.mycorp.project.first
com.mycorp.project.second
i'd configure log4j (slf4j) write logs 1 package 1 file, , other package second file. not want them mixed in together.
to clear, 1 project/one process running.
i've tried filtering , loggers seem ignored log4j. both files identical.
edit: thank answers far, i've got , it's not working. both output files identical.
<configuration debug="true"> <contextname>dev</contextname> <appender name="first_file" class="ch.qos.logback.core.rolling.rollingfileappender"> <file>a:/dev/logtesting/logs/first.log</file> <filter class="ch.qos.logback.classic.filter.thresholdfilter"> <level>info</level> </filter> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <filenamepattern>a:/dev/logtesting/logs/first.%d{yyyymmdd}%d{_hhmmss,aux}.log.gz</filenamepattern> </rollingpolicy> <encoder> <pattern>%d{mmm dd hh:mm:ss.sss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="second_file" class="ch.qos.logback.core.rolling.rollingfileappender"> <file>a:/dev/logtesting/logs/second.log</file> <filter class="ch.qos.logback.classic.filter.thresholdfilter"> <level>info</level> </filter> <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy"> <filenamepattern>a:/dev/logtesting/logs/second.%d{yyyymmdd}%d{_hhmmss,aux}.log.gz</filenamepattern> </rollingpolicy> <encoder> <pattern>%d{mmm dd hh:mm:ss.sss} %property{hostname} [%thread] %level %logger{36} %msg%n</pattern> </encoder> </appender> <!-- =============================================================== --> <logger name="com.test.apples" additivity="false"> <level value="debug" /> <appender-ref ref="first_file" /> </logger> <logger name="com.test.oranges" additivity="false"> <level value="debug" /> <appender-ref ref="second_file" /> </logger> <!-- =============================================================== --> <category name="com.test.apples" additivity="false"> <priority value="debug"/> <appender-ref ref="first_file"/> </category> <category name="com.test.oranges" additivity="false"> <priority value="debug"/> <appender-ref ref="second_file"/> </category> <!-- =============================================================== --> <!-- default --> <root level="warn"> <appender-ref ref="first_file" /> <appender-ref ref="second_file" /> </root>
try example of properties file:
log4j.rootlogger=debug, console # each package has different appender name log4j.logger.com.mycorp.project.first=debug, first log4j.logger.com.mycorp.project.second=debug, second log4j.appender.first=org.apache.log4j.rollingfileappender log4j.appender.first.file=./first.log log4j.appender.first.layout=org.apache.log4j.patternlayout log4j.appender.second=org.apache.log4j.rollingfileappender log4j.appender.second.file=./second.log log4j.appender.second.layout=org.apache.log4j.patternlayout or xml (only highlight important part):
<!-- first appender definition --> <appender name="first" class="org.apache.log4j.fileappender"> ... </appender> <!-- second appender definition --> <appender name="second" class="org.apache.log4j.fileappender"> ... </appender> <!-- logger package com.mycorp.project.first --> <logger name="com.mycorp.project.first"> <level value="debug" /> <appender-ref ref="first"/> </logger> <!-- logger package com.mycorp.project.second --> <logger name="com.mycorp.project.second"> <level value="debug" /> <appender-ref ref="second"/> </logger>
Comments
Post a Comment