精华内容
下载资源
问答
  • log4j动态生成日志文件 log4j在第一次加载的时候会生成需要记录的日志文件,这个生成的日志文件如果不小心删除了,那么log4j将不会再重新创建一个新的文件,导致日志数据信息流失。这时就需要解决在日志文件删除的...

    log4j动态生成日志文件

    log4j在第一次加载的时候会生成需要记录的日志文件,这个生成的日志文件如果不小心删除了,那么log4j将不会再重新创建一个新的文件,导致日志数据信息流失。这时就需要解决在日志文件删除的情况下,如何动态的自动生成日志文件呢。
    查看源码,我们会发现log4j在记录日志的时候会有一个记录策略。

    public boolean isTriggeringEvent(LogEvent event) {
            boolean triggered = this.manager.getFileSize() > this.maxFileSize;
            if (triggered) {
                this.manager.getPatternProcessor().updateTime();
            }
    
            return triggered;
        }
    

    即在准备将数据写入日志的时候会调用这个方法。因此我们在这里加入判断是否文件存在的方法即可,如果文件不存在就创建一个新的文件,这里调用它的rollover方法重新创建文件。

    public synchronized void rollover() {
            if (this.hasOutputStream()) {
                if (this.rollover(this.rolloverStrategy)) {
                    try {
                        this.size = 0L;
                        this.initialTime = System.currentTimeMillis();
                        this.createFileAfterRollover();
                    } catch (IOException var2) {
                        this.logError("Failed to create file after rollover", var2);
                    }
                }
    
            }
        }
    

    因此将isTriggeringEvent进行修改方案如下:

    public boolean isTriggeringEvent(LogEvent event)
      {
        File file = new File(this.manager.getFileName());
        if (!file.exists()) {
          this.manager.rollover();
        }
        
        boolean triggered = this.manager.getFileSize() > this.maxFileSize;
        if (triggered) {
          this.manager.getPatternProcessor().updateTime();
        }
        return triggered;
      }
    

    这里使用的是直接在源码里面修改,所以需要先下载log4j-core的源码包,修改后编译替换log4j-core.jar里面的class文件。重新发布到项目。经过鄙人测试,在删除了日志文件后,当有新的日志生成时会动态生成新的日志文件。
    修改前:
    在这里插入图片描述
    删除所有日志:
    在这里插入图片描述
    通过相关操作重新触发日志生成:
    在这里插入图片描述
    log4j动态生成日志jar包:
    log4j-core-2.12.0.jar

    展开全文
  • 配置文件如下log4j.rootLogger=WARN,stdout,filelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.Co...

    如题,我用的是eclipse。

    配置文件如下log4j.rootLogger=WARN, stdout, file

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

    # Output to the File

    log4j.appender.file=org.apache.log4j.FileAppender

    log4j.appender.file.File=./jfinal_demo.log

    #log4j.appender.file.File=../WebRoot/data/tcbcloud2.log

    log4j.appender.file.layout=org.apache.log4j.PatternLayout

    log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

    # Druid

    log4j.logger.druid.sql=warn,stdout

    log4j.logger.druid.sql.DataSource=warn,stdout

    log4j.logger.druid.sql.Connection=warn,stdout

    log4j.logger.druid.sql.Statement=debug,stdout

    log4j.logger.druid.sql.ResultSet=warn,stdout

    在代码中的调用如下Logger logg=Logger.getLogger(ExceptionInterceptor.class);private void logWrite(Invocation inv,Exception e){

    //开发模式

    if (JFinal.me().getConstants().getDevMode()){

    e.printStackTrace();

    }

    StringBuilder sb =new StringBuilder("\n---Exception Log Begin---\n");

    sb.append("Controller:").append(inv.getController().getClass().getName()).append("\n");

    sb.append("Method:").append(inv.getMethodName()).append("\n");

    sb.append("Exception Type:").append(e.getClass().getName()).append("\n");

    sb.append("Exception Details:");

    logg.error(sb.toString(),e);

    }

    主要问题还是出在不生成文件,在控制台的输出是正常的,还是说我没找到正确文件的位置?我在“D:\Workspaces\Eclipse_Oxygen\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tcbcloud2”这种路径里也没找到,打包放在Tomcat下运行也没找到。。很焦灼。。

    展开全文
  • 功能如标题,代码如下MyRollingFileAppenderpackagecom....importorg.apache.log4j.Layout;importorg.apache.log4j.Priority;importorg.apache.log4j.RollingFileAppender;importorg.apache.log4j.helpers.Count...

    功能如标题,代码如下MyRollingFileAppenderpackage com.source.util;

    import org.apache.log4j.Layout;

    import org.apache.log4j.Priority;

    import org.apache.log4j.RollingFileAppender;

    import org.apache.log4j.helpers.CountingQuietWriter;

    import org.apache.log4j.spi.LoggingEvent;

    import java.io.File;

    import java.io.IOException;

    import java.text.SimpleDateFormat;

    import java.time.LocalDate;

    import java.util.Date;

    /**

    * 修改log的生成策略(一天一个目录,每次重启日志文件切换新的)

    *

    * @author source

    */

    @SuppressWarnings("Duplicates")

    public class MyRollingFileAppender extends RollingFileAppender {

    private LocalDate localDate = null;

    private String parternFileName = null;

    /**

    * 默认的无参构造

    */

    public MyRollingFileAppender() {

    super();

    }

    /**

    * 三参构造

    */

    public MyRollingFileAppender(Layout layout, String filename, boolean append) throws IOException {

    super(layout, filename, append);

    parternFileName = filename;

    }

    /**

    * 二参构造(append->true)

    */

    public MyRollingFileAppender(Layout layout, String filename) throws IOException {

    super(layout, filename);

    }

    /**

    * 修改fileName方法在截断生成新文件前调用

    */

    @Override

    public void setFile(String file) {

    if (parternFileName == null) {

    parternFileName = file;

    }

    super.fileName = DatePatternParser.parse(new StringBuilder(parternFileName));

    }

    /**

    * 当前日志输出行只输出到对应的日志等级文件(不做向下兼容)

    */

    @Override

    public boolean isAsSevereAsThreshold(Priority priority) {

    return this.getThreshold().equals(priority);

    }

    /**

    * 修改日志策略主要逻辑

    */

    @Override

    protected void subAppend(LoggingEvent event) {

    boolean rollOver = false;

    //重启且有日志生成新文件

    if (localDate == null) {

    localDate = LocalDate.now();

    if (new File(fileName).length() > 0) {

    rollOver = true;

    }

    }

    if (fileName != null && qw != null) {

    long size = ((CountingQuietWriter) qw).getCount();

    long nextRollover = 0;

    //添加日期判断,确保变更日期触发日志截断

    boolean flag = (size >= maxFileSize && size >= nextRollover) || !LocalDate.now().equals(localDate);

    if (flag) {

    localDate = LocalDate.now();

    rollOver = true;

    }

    }

    //如果存在换文件操作,就在换完文件后再输出日志

    if (rollOver) {

    setFile(parternFileName);

    rollOver();

    }

    super.subAppend(event);

    }

    /**

    * 路径带时间字符串格式化

    */

    static class DatePatternParser {

    static final String HEAD = "%d";

    static String parse(StringBuilder str) {

    while (str.indexOf(HEAD) > 0) {

    int index = str.indexOf(HEAD);

    int indexEnd = str.indexOf("}", index) + 1;

    int indexStart = str.indexOf("{", index);

    String p = str.substring(indexStart + 1, indexEnd - 1);

    SimpleDateFormat sdf = new SimpleDateFormat(p);

    str.replace(index, indexEnd, sdf.format(new Date()));

    }

    return str.toString().trim();

    }

    }

    }

    log4j.properties# DEBUG 

    #log4j.rootLogger=ALL,debug,console,info,warn,error

    logDir=./logs/jfinal-test

    log4j.rootLogger=ALL,console,debug,info,warn,error

    log4j.appender.console=org.apache.log4j.ConsoleAppender

    log4j.appender.console.layout=org.apache.log4j.PatternLayout

    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%t|%c|%p|%m%n

    log4j.appender.console.Threshold = debug

    log4j.logger.debug=debug

    log4j.appender.debug=com.source.util.MyRollingFileAppender

    log4j.appender.debug.layout=org.apache.log4j.PatternLayout

    log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%p|%m%n

    log4j.appender.debug.Threshold = DEBUG

    log4j.appender.debug.File=${logDir}/%d{yyyy-MM}/%d{dd}/debug/debug.log

    log4j.appender.debug.MaxFileSize=10MB

    log4j.appender.debug.MaxBackupIndex=10

    log4j.appender.debug.Encoding =UTF-8

    log4j.logger.info=info

    log4j.appender.info=com.source.util.MyRollingFileAppender

    log4j.appender.info.layout=org.apache.log4j.PatternLayout

    log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%p|%m%n

    log4j.appender.info.Threshold = INFO

    log4j.appender.info.File=${logDir}/%d{yyyy-MM}/%d{dd}/info/info.log

    log4j.appender.info.MaxFileSize=10MB

    log4j.appender.info.MaxBackupIndex=10

    log4j.appender.info.Encoding =UTF-8

    log4j.logger.warn=warn

    log4j.appender.warn=com.source.util.MyRollingFileAppender

    log4j.appender.warn.layout=org.apache.log4j.PatternLayout

    log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%p|%m%n

    log4j.appender.warn.Threshold = WARN

    log4j.appender.warn.File=${logDir}/%d{yyyy-MM}/%d{dd}/warn/warn.log

    log4j.appender.warn.MaxFileSize=10MB

    log4j.appender.warn.MaxBackupIndex=10

    log4j.appender.warn.Encoding =UTF-8

    log4j.logger.error=error

    log4j.appender.error=com.source.util.MyRollingFileAppender

    log4j.appender.error.layout=org.apache.log4j.PatternLayout

    log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%p|%m%n

    log4j.appender.error.Threshold = ERROR

    log4j.appender.error.File=${logDir}/%d{yyyy-MM}/%d{dd}/error/error.log

    log4j.appender.error.MaxFileSize=10MB

    log4j.appender.error.MaxBackupIndex=10

    log4j.appender.error.Encoding =UTF-8

    展开全文
  • 完成log4j的配置文件后通过idea成功的输出了日志文件,不过生成的文件在idea编译器中没有产生乱码,但是到了日志文件中却有乱码问题,图片如下 仔细查看一下log4j配置文件后,猜测乱码原因极有可能是由于编码格式的...

    完成log4j的配置文件后通过idea成功的输出了日志文件,不过生成的文件在idea编译器中没有产生乱码,但是到了日志文件中却有乱码问题,图片如下

    仔细查看一下log4j配置文件后,猜测乱码原因极有可能是由于编码格式的原因造成的,于是在配置文件中配置了一下编码格式,发现果然有效。成果如下

    展开全文
  • 我正在使用slf4j通过java实用程序日志记录...以下是我的logging.properties文件怎么样子:slf4j日志记录问题 - 未生成日志文件# Logginghandlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandl...
  • 1,程序a会滚动生成日志文件,日志配置的方式是 限定每一个日志文件的大小是2MB,使用到的日志API是org.apache.log4j.RollingFileAppender 也就是说可以滚动生成日志,每一个日志文件的大小在2MB左右配置文件的内容...
  • @[TOC]完整且可用log4j2.xml文件配置 1.文件生成目录为:本项目的logfiles自定义目录,完整xml中是按没小时生成。 <?xml version="1.0" encoding="UTF-8"?> <!-- status=debug 可以查看log4j的装配过程 --&...
  • SpringBoot生成日志文件---logback和log4j 一、logback logback是SpringBoot自带的日志文件,默认会为控制台输出INFO级别的日志,并且不会将日志文件保存。 如果我们只需要输出日志到文件,直接给application.yml中...
  • tomcat启动后,登录日志都显示在tomcat的catalina.out里,没有打印在对应的项目的日志文件里 配置文件 : logFilePath=/data/logs/Login-Interface/log.txt log4j.rootLogger=DEBUG,A1 log4j.logger....
  • Log4j2 对于生成日志文件时,可以通过对中的进行设置,来完整日志文件各种生成方案定期生成日志文件log4j2.xmluser/logsfilePattern="${LOG_HOME}/app-%d{yyyy-MM-dd}.log">此时日志按天数产生,及每天产生一个新...
  • log4j输出多个自定义日志文件如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志...
  • --文件日志, 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> ...
  • 问题如下 这里rzb.log文件打不开! 原因在于生成文件里面有乱码,导致无法打开。 解决方法! 这里我是直接使用的包名方法,实体类首...如果log4j配置文件里没设置覆盖日志的话,需要删除再运行一遍! 成功! ...
  • 我可以在控制台中看到日志消息但这些消息没有附加到文件我正在使用以下罐子.slf4j-log4j12-1.7.5.jarslf4j-api-1.7.1.jarlog4j-1.2.17.jar我的log4j.properties文件如下.# Root logger optionlog4j.rootLogger=INFO,...
  • 一、配置属性文件log4j.propertieslog4j.rootLogger=INFO,stdout,Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the ...
  • 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs...这样,我们就可以在log4j加载配置文件之前,先用System.setPro...
  • log4j在linux下不生成日誌文件在tomcat的某站點下使用log4j,配置文件log4j.properties在WEB-INF/classes下內容如下Java codelog4j.rootCategory=WARN,R#log4j.appender.stdout=org.apache.log4j.ConsoleAppender#log...
  • log4j案例5—每小时生成一个日志文件创建项目项目名称:006-log4j-demo项目的pom.xml文件xmlns:xsi=...
  • 1.Maven的dependency2.log4j.properties的配置3.Junit的Test类4.web.xml的配置(非必要)5.spring的db.config的配置(非必要)一.maven的dependencyorg.apache.logging.log4jlog4j-core2.3org.slf4jslf4j-log4j121.7.25...
  • 将模块打成jar包后放到Linux环境,使用-Dlog4j.configurationFile=/root/log4j2.xml -jar demo.jar模块启动后在日志目录生成日志文件,但是文件中始终不输入内容pom文件中依赖只有以下两个starter,没有指定其他...
  • 日志框架LOG4J2系列二——log4j2配置文件欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • 动态创建log文件名,但是log4j2 创建的文件名字是固定的,只能……
  • Java codepublic // synchronization not necessary since doAppend is alreasy synchedvoid rollOver() {File target;...LogLog.debug("rolling over count=" + ((CountingQuietWriter) qw).getCount());Log...
  • log.info打印到info.log文件 error.info打印到error.log文件
  • import org.apache.log4j.helpers.LogLog; import org.apache.log4j.helpers.OptionConverter; import org.apache.log4j.spi.LoggingEvent; import com.xxxx.core.util.DateUtil; import ...
  • 首先在resources目录下创建xml文件logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds"> <contextName>logback</contextName&...
  • 以上是网上log4j日志文件的相对路径配置的三种方法(我能找到的就三种),分析:方法一主要是扩展了log4j的RollingFileAppender类,其他的FileAppender同样道理。扩展的方法,就是用一个子类去覆盖setFile方法,这个...
  • 这有什么问题呢,虽然说我们用一天一次的滚动日志,但是我们配置的DataPattern为小时级别的,所以只要每个小时有日志生成,那么每个小时都会生成日志,简单来说就是一个小时一个。 这个对于我们日志记录
  • 一、什么是RollingFileRollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender。rollover的意思是当满足一定条件(如文件达到了指定的大小,达到了指定的时间)后,就重命名原日志文件进行...
  • 1 packagecom.hm.sage.bigdata.spark.log;23 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.text.SimpleDateFormat;8 importjav...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,566
精华内容 39,426
关键字:

log4j没有生成日志文件