如何使用 slf4j logger 将日志打印到文件中以用于调试和其他级别
How to use slf4j logger to print logs to a file for debug and other levels
我知道之前有人问过这个问题,从我正在阅读的其他回复中我拼凑了一堆信息,但我仍然无法实现我想要的。
我的目标是让我的 maven/java 项目每天将信息、调试、跟踪等级别的日志打印到一个新文件中。理想情况下,我希望 jan21.info.log、jan22.info.log、jan21.debug.log、jan22.debug.log...等你明白了,但我什至无法让我的程序打印到文件.我在下面粘贴了我的 pom.xml、java、class 和 log4j.properties 文件。顺便说一句,Slf4j 是一项要求。如您所知,这是非常非常基本的,但由于某种原因我无法让它工作。非常感谢这里的任何帮助。提前致谢。
更新:
该程序能够在根文件夹中创建一个文本文件并正常写入。我也将写入代码添加到下面的 App.java。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>com.mycompany.app.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
src/main/resources >> log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, file
# File appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n
log4j.appender.file.File=/Users/ajanis/DR/GS/tmp/my-app/myoutput.log
log4j.appender.file.MaxFileSize=100KB
src/main/java >> App.java
package com.mycompany.app;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App
{
private static Logger log = LoggerFactory.getLogger(App.class);
public static void main (String [] arg) throws FileNotFoundException, UnsupportedEncodingException
{
System.out.println("\n\nBegin\n");
log.info("hello info");
log.debug("debug");
PrintWriter writer = new PrintWriter("blah.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
System.out.println("\nEnd");
}
}
首先 - 看起来您想使用 log4j 进行日志记录,但您没有合适的 binding 即 slf4j-log4j12-1.7.10.jar
。请注意,您需要删除现有的 slf4j-simple
依赖项!
其次是您的命名问题:我建议您使用 logback 作为绑定,因为它的配置非常灵活。见例如。 time based rolling.
我知道之前有人问过这个问题,从我正在阅读的其他回复中我拼凑了一堆信息,但我仍然无法实现我想要的。
我的目标是让我的 maven/java 项目每天将信息、调试、跟踪等级别的日志打印到一个新文件中。理想情况下,我希望 jan21.info.log、jan22.info.log、jan21.debug.log、jan22.debug.log...等你明白了,但我什至无法让我的程序打印到文件.我在下面粘贴了我的 pom.xml、java、class 和 log4j.properties 文件。顺便说一句,Slf4j 是一项要求。如您所知,这是非常非常基本的,但由于某种原因我无法让它工作。非常感谢这里的任何帮助。提前致谢。
更新: 该程序能够在根文件夹中创建一个文本文件并正常写入。我也将写入代码添加到下面的 App.java。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>com.mycompany.app.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
src/main/resources >> log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, file
# File appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n
log4j.appender.file.File=/Users/ajanis/DR/GS/tmp/my-app/myoutput.log
log4j.appender.file.MaxFileSize=100KB
src/main/java >> App.java
package com.mycompany.app;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App
{
private static Logger log = LoggerFactory.getLogger(App.class);
public static void main (String [] arg) throws FileNotFoundException, UnsupportedEncodingException
{
System.out.println("\n\nBegin\n");
log.info("hello info");
log.debug("debug");
PrintWriter writer = new PrintWriter("blah.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
System.out.println("\nEnd");
}
}
首先 - 看起来您想使用 log4j 进行日志记录,但您没有合适的 binding 即 slf4j-log4j12-1.7.10.jar
。请注意,您需要删除现有的 slf4j-simple
依赖项!
其次是您的命名问题:我建议您使用 logback 作为绑定,因为它的配置非常灵活。见例如。 time based rolling.