Java 如何制作一个可以从不同包记录到不同文件的记录器
因此,我使用Log4j2将我的应用程序中的信息记录到一些文件中,但要知道,我希望将文件按包分开。我有一个记录器,我不知道如何让他按包/类过滤日志/Java 如何制作一个可以从不同包记录到不同文件的记录器,java,logging,log4j2,Java,Logging,Log4j2,因此,我使用Log4j2将我的应用程序中的信息记录到一些文件中,但要知道,我希望将文件按包分开。我有一个记录器,我不知道如何让他按包/类过滤日志/ <Logger name="hextodec.MainClass" additivity="FALSE"> <AppenderRef ref="info" level="INFO"/> <AppenderRef ref="error" level="ERROR"/>
<Logger name="hextodec.MainClass" additivity="FALSE">
<AppenderRef ref="info" level="INFO"/>
<AppenderRef ref="error" level="ERROR"/>
<AppenderRef ref="stdout" level ="INFO" />
</Logger>
您可以通过创建多个文件附加器来实现这一点 示例: 追加器示例
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="/var/log/file.log">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="com.foo.Bar" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="com.foo.acme" level="trace">
<AppenderRef ref="File"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
%d%p%C{1.}[%t]%m%n
嘿,这只是为您提供信息,为您的测试用例提供想法和实现:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="HIBERNATE_LOG_LOCATION" value="../logs/dev/hibernate" />
<property name="HIBERNATE_ARCHIVE_LOG_LOCATION" value="../logs/dev/hibernate/archive" />
<property name="SPRING_LOG_LOCATION" value="../logs/dev/spring" />
<property name="SPRING_ARCHIVE_LOG_LOCATION" value="../logs/dev/spring/archive" />
<appender name="HIBERNATE_INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${BASE_LOCATION}${HIBERNATE_LOG_LOCATION}/RERUN_UTIL_HIB_INFO.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- hourly rollover -->
<fileNamePattern>${BASE_LOCATION}${HIBERNATE_ARCHIVE_LOG_LOCATION}/RERUN_UTIL_HIB_INFO.%d{yyyy-MM-dd_HH}.%i.log.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<!-- <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern> -->
<pattern>%date [%thread] %-5level %class [%M:%L] - %msg%n</pattern>
</encoder>
</appender>
<!-- similar appenders for all others -->
<appender name="SP_INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${BASE_LOCATION}${SPRING_LOG_LOCATION}/SPRING_INFO.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- hourly rollover -->
<fileNamePattern>${BASE_LOCATION}${SPRING_ARCHIVE_LOG_LOCATION}/SPRING_INFO.%d{yyyy-MM-dd_HH}.%i.log.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%date [%thread] %-5level %class [%M:%L] - %msg%n</pattern>
</encoder>
</appender>
<!-- similar appenders for all others-->
<logger name="org.hibernate" additivity="false">
<appender-ref ref="HIBERNATE_DEBUG" />
<appender-ref ref="HIBERNATE_INFO" />
<appender-ref ref="HIBERNATE_ERROR" />
</logger>
<logger name="org.springframework" additivity="false">
<appender-ref ref="SP_ERROR" />
<appender-ref ref="SP_DEBUG" />
<appender-ref ref="SP_INFO" />
</logger>
<root level="ALL">
<appender-ref ref="INFO" />
<appender-ref ref="DEBUG" />
<appender-ref ref="ERROR" />
</root>
</configuration>
${BASE\u LOCATION}${HIBERNATE\u LOG\u LOCATION}/RERUN\u UTIL\u HIB\u INFO.LOG
${BASE\u LOCATION}${HIBERNATE\u ARCHIVE\u LOG\u LOCATION}/RERUN\u UTIL\u HIB\u INFO.%d{yyyy-MM-dd\u HH}.%i.LOG.gz
5MB
30
信息
接受
否认
%日期[%thread]-5级别%class[%M:%L]-%msg%n
${BASE\u LOCATION}${SPRING\u LOG\u LOCATION}/SPRING\u INFO.LOG
${BASE\u LOCATION}${SPRING\u ARCHIVE\u LOG\u LOCATION}/SPRING\u INFO.%d{yyyy-MM-dd\u HH}.%i.LOG.gz
5MB
30
信息
接受
否认
%日期[%thread]-5级别%class[%M:%L]-%msg%n
希望这能解决您的问题。您可以为不同的包使用不同的appender,为相应的包指定每个appender ref
假设我有几个不同的appender,如果我从一个级别登录,记录器将如何区分软件包是的,没有问题。始终可供提问:):)如果我只想使用一个记录器怎么办?删除其他条目并保留所需的条目。在上面的示例中,删除
并使用它。这是一个Logback配置,但Log4j 2的等效配置将非常类似。