如何使用 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 进行日志记录,但您没有合适的 bindingslf4j-log4j12-1.7.10.jar。请注意,您需要删除现有的 slf4j-simple 依赖项!

其次是您的命名问题:我建议您使用 logback 作为绑定,因为它的配置非常灵活。见例如。 time based rolling.