我试图创建一个简单的spring boot应用程序,该日志应在控制台中打印到项目文件夹之外的文件中,该日志可以在控制台中打印但不能写入file。我指定了文件位置(未创建文件,我认为文件会自动生成)
这是添加的依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Add Log4j2 Dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
这是log4j.xml文件(位置src / main / resources / log4j2.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT"
follow="true">
<PatternLayout pattern="${LOG_PATTERN}" />
</Console>
<!-- Rolling File Appender -->
<RollingFile name="FileAppender"
fileName="/home/ubuntu/Documents/eclipse/logs/log4j2-demo.log"
filePattern="logs/log4j2-demo-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="FileAppender" />
</Root>
</Loggers>
</Configuration>
我在主类中添加了日志记录功能
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LoggingApplication {
private static final Logger logger = LogManager.getLogger(LoggingApplication.class);
public static void main(String[] args) {
logger.info("in main class");
logger.info("info logging is printed");
logger.debug("logger debud is worked");
logger.warn("logging warn is worked");
SpringApplication.run(LoggingApplication.class, args);
}
}
答案 0 :(得分:1)
我要做的第一件事是尝试按照in the documentation所述从类路径中删除登录绑定。
因此,您的pom.xml
配置最终将包含排除项,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
此外,我建议不要直接使用log4j API类,而应使用sfl4j
API。已经将spring-boot配置为将SL4J与在类路径上配置的任何绑定程序一起使用(在本例中为log4j)。
因此,我将org.apache.logging.log4j.Logger
用于记录器类,而不是使用org.slfj.Logger
,并使用org.slf4j.LoggerFactory.getLogger()
创建它。与直接使用log4j类相比,这样做的好处是您可以在slf4j下切换绑定程序,而无需更改所有代码。以防万一您稍后决定要使用Logback或其他功能。
如果您对pom进行了更改,并使用slf4j API,我认为 spring-boot自动配置将加载您的配置,并开始记录到文件附加器和控制台
答案 1 :(得分:0)
请遵循以下方法,在这里,我为单个记录器配置了两个追加器。如果使用该记录器名称记录任何内容,则所有记录消息都将发送到两个位置。对于您的控制台和文件。
<logger name="pushnotification" level="debug" additivity="false">
<appender-ref ref="NOTIFICATION-FILE-APPENDER" />
<appender-ref ref="NOTIFICATION-CONSOLE-APPENDER" />
</logger>
<appender name="NOTIFICATION-CONSOLE-APPENDER" class="ch.qos.logback.core.ConsoleAppender">
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%date{yyyy-MM-dd HH:mm:ss}][%level][%c][%t] - %msg%n
</pattern>
</encoder>
</appender>
<appender name="NOTIFICATION-FILE-APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logs.home}/applogs/notification.log</file>
<append>true</append>
</appender>
答案 2 :(得分:0)
您可以执行以下操作:
#####LOGGING. . . .
logging.level.org.springframework.web=ERROR
logging.level.com.hsc.adauth.*=DEBUG
# Logging pattern for the console
logging.pattern.console="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
# Logging pattern for file
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
#output to a temp_folder/file(give your file path here)
logging.file=${java.io.tmpdir}/application.log
您也可以使用AOP在应用程序中进行集中登录。.....