【发布时间】:2020-06-24 20:03:56
【问题描述】:
我有一个要求,我需要创建日志文件,以便所有基于标签(最好是文本)的日志都需要记录到相应的日志文件中。
例如,
我有关于苹果、橙子和芒果的日志。
logger.info("Apples: They are red in color");
logger.info("Oranges: They are orange in color");
logger.info("Mangoes: They are yellowish in color");
根据我的要求,第一个日志应该记录到 Apples.log,第二个到 Oranges.log,第三个到 Mangoes.log
日志文件应该是动态创建的。
下面显示的是我的 logback.xml 文件
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>
%d %-5p - %marker%m%n
</Pattern>
</encoder>
</appender>
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>fruitName</key>
<defaultValue>Common_logs</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${instanceName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./Logs/${fruitName}/${instanceName}.log</fileNamePattern>
<maxHistory>50</maxHistory>
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d %-5p - %m%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<logger name="AssetInstanceService" level="info" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="SIFT" />
</logger>
<root level="info">
<appender-ref ref="SIFT" />
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
下面是我的 LogManager.java 文件
package Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
public class LogManager {
static String configFile = "./logback.xml";
private static Logger _logger = LoggerFactory.getLogger(LogManager.class);
private static boolean _isInitialized = false;
private LogManager() {
}
public static Logger Instance() {
if (_logger == null) {
_logger = LoggerFactory.getLogger(LogManager.class);
}
return _logger;
}
public static Logger Instance(String instanceName) {
if (!_isInitialized) {
if (!CommonMethods.CheckFileExist(configFile)) {
configFile = "../logback.xml";
if (!CommonMethods.CheckFileExist(configFile)) {
return null;
}
}
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
lc.reset();
configurator.setContext(lc);
try {
configurator.doConfigure(configFile);
MDC.put("fruitName", instanceName);
} catch (JoranException e) {
System.out.println(e);
}
_isInitialized = true;
}
if (_logger == null) {
_logger = LoggerFactory.getLogger(LogManager.class);
}
return _logger;
}
}
这里我的日志是在我在 main 方法中初始化记录器时运行 jar 文件时创建的。
但我的需要是根据日志中的标签或ID创建不同名称的不同日志文件。
【问题讨论】:
标签: java logging log4j logback slf4j