解决logback的日志文件路径问题

假如使用绝对路径,没有任何问题,就是移植性不太好。

假如使用相对路径,则要注意当前路径“.”是在哪儿?

一般我们都会在配置文件中加入log文件的存储目录,如

本人通过研究测试发现:

1.对于J2SE项目,当前路径为工程所在目录

如我的工程为:D:\test

则使用…/logs生成的日志文件位于:D:\logs

2.对于J2EE项目,当前路径为tomcat\bin所在目录

如我的tomcat路径为:D:\tomcat\bin

则使用…/logs生成的日志文件位于:D:\tomcat\logs

补充:logback加载外部配置文件 重置logback配置文件路径

logback加载外部配置文件 重置logback配置文件路径

logback作为一种成熟的日志框架,已被广泛应用在现代各种java项目中。

以javaweb项目为例,使用logback.xml作为logback的配置文件时,在代码中通常是将该配置文件放在src/main/resource/下,部署时该文件会放在classpath下。

但是,有时出于各种目的,需要将logback的配置文件放在特定的目录下,此时需要自定义logback配置文件的加载路径。

logback自动加载配置文件的优先级如下:

1.classpath下的logback-test.xml

2.classpath下的logback.groovy

3.classpath下的logback.xml

4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置实现类

5.logback自带的默认配置文件BasicConfigurator

当需要将日志配置文件放在其他路径下时,其实就是logback重新加载配置文件的过程。

参考代码如下:

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.util.StatusPrinter;
import java.io.File;
public class LogTest
{
 private org.slf4j.Logger logger;
 private ch.qos.logback.classic.LoggerContext loggerContext;
 public LogTest()
 {
  logger = org.slf4j.LoggerFactory.getLogger(this.class);
  loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory();
  String logbackConfigPath = System.getProperty("user.dir") + "/your_logback_config/logback.xml";
  File file = new File(logbackConfigPath);
  if(!file.exists())
  {
  logger.error("logbackConfigPath file is no exist");
  }
  else
  {
  if(!file.isFile())
  {
  logger.error("logbackConfigPath file is not a file");
  }
  else
  {
  if(!file.canRead())
  {
  logger.error("logbackConfigPath file can not read");
  }
  else
  {
  JoranConfigurator joranConfigurator = new JoranConfigurator();
    joranConfigurator.setContext(loggerContext);
    loggerContext.reset();
    try {
     joranConfigurator.doConfigure(file);
    } catch (Exception e) {
    logger.error("logbackConfigPath Load logback config file error. Message: {}",e.getMessage());
    }
    StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);
  }
  }
  }
 }
}

System.getProperty(“user.dir”) 是获取你程序当前的运行路径,这里也可以把这段代码封装成一个方法,配置文件的路径可以以参数的形式传入,也可以写死。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Logback日志存放路径不统一解决方案

    问题: 将一个应用程序打成了Jar包后,使用命令运行jar包,发现日志存放的路径并不统一: 比如 hello.jar 包放在 /aaa/bbb 目录下 如果在 /aaa/bbb 目录下执行:java -jar hello.jar ,那么日志就会存放在 /aaa/bbb 目录下 如果在 /aaa 目录下执行:java -jar bbb/hello.jar ,那么日志就会存放在 /aaa 目录下 如何才能不同位置执行jar包,但是日志放到一个统一的目录中呢? 解决过程: 查看logback.xml中

  • 基于logback 实现springboot超级详细的日志配置

    前言 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用).其中性能最高的应该使 logback 了,而且 springboot 默认使用的也是 logback 日志,所以本篇将会详细的讲解 logback 的日志配置方案. 本篇主要内容如下: •logback 配置文件的构成 •如何将日志输出到文件 •如何按时间,按大小切分日志 •如何将让一个日志文件中只有

  • springboot使用Logback把日志输出到控制台或输出到文件

    一:日志: 1.配置日志级别 日志记录器(Logger)的行为是分等级的.如下表所示: 分为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别 设置日志级别 logging.level.root=WARN 这种方式只能将日志打印在控制台上 二.Logback日志 spring boot内部使用Logback作为日志实现的框架. Logback和log4j非常相似,如果你对l

  • 使用Logback日志保存到相对路径的操作

    说明 在使用Logback中需要保存输出日志,但是却在保存的时候路径出现问题 项目背景 1.Win7 2.Java Web + Tomcat 7.0(在D盘目录下) 3.Logback 1.1.7 案例一 Logback.xml文件配置 <!-- 路径名称 --> <property name="log.base" value="logs" /> <!-- 保存的文件名 --> <property name="lo

  • 解决logback的日志文件路径问题

    假如使用绝对路径,没有任何问题,就是移植性不太好. 假如使用相对路径,则要注意当前路径"."是在哪儿? 一般我们都会在配置文件中加入log文件的存储目录,如 本人通过研究测试发现: 1.对于J2SE项目,当前路径为工程所在目录 如我的工程为:D:\test 则使用-/logs生成的日志文件位于:D:\logs 2.对于J2EE项目,当前路径为tomcat\bin所在目录 如我的tomcat路径为:D:\tomcat\bin 则使用-/logs生成的日志文件位于:D:\tomcat\lo

  • Java 配置log4j日志文件路径 (附-获取当前类路径的多种操作)

    1 日志路径带来的痛点 Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径. 本文借鉴 Tomcat 的配置方式 "${catalina.home}/logs/catalina.out", 通过相对路径的方式设置日志的输出路径, 有其他解决方案的小伙伴, 请直接评论区交流哦

  • 解决Vue打包之后文件路径出错的问题

    这里以vue-cli创建的项目为例 1.文件路径不对 找到config文件夹下的index.js文件修改一下位置 看清楚是 build(上边还有个dev 是开发环境下的配置,不需要改动)下的 assetsPublicPath :将'/'改为'./' 2.背景图片路径不对 在css中写的background-img的路径出错 需要找到build文件夹下的utils.js,修改一下位置 加入红框内字段即可. 以上这篇解决Vue打包之后文件路径出错的问题就是小编分享给大家的全部内容了,希望能给大家一个

  • 关于logBack配置日志文件及编码配置的问题

    记录下使用logback中遇到的问题,方便以后查看 logback输出到文件文件大小设置问题 目前网上能搜到的关于输出到日志文件的大小设置有如下两种: 1.单独的triggeringPolicy标签 若rollingPolicy用SizeAndTimeBasedRollingPolicy,直接复制下面的triggeringPolicy会报错,说无法创建triggeringPolicy component. <rollingPolicy class="ch.qos.logback.core.

  • 解决db2事务日志已满及日志磁盘空间已满问题办法详解

    事务日志满指当前事务无法写入到活动日志中(主日志文件和辅助日志文件已全部用完或者没有足够当前事务写入的空间) 日志磁盘空间已满指辅助日志文件还未使用完,磁盘空间已经满了. db2数据库事务日志文件分为主日志文件和辅助日志文件,主日志文件已分配空间,辅助日志文件使用时再分配. 查看事务日志配置(mid为数据库名称): db2 get db cfg for mid 运行结果: 日志文件大小(4KB)                         (LOGFILSIZ) = 1024 主日志文件的数

  • Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式. 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过application.yml下发 按天生成日志,当天的日志>50MB回滚 最多保存10天日志 生成的日志中Pattern自

  • Spring boot使用logback实现日志管理过程详解

    Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计.本篇就是来看看如何使用logback. 1.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency&g

  • 使用logback实现日志打印过滤

    logback日志打印过滤 1.只打印sql语句以及参数 <?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 设置 logger context 名称,一旦设置不可改变,默认为default --> &l

  • MongoDB日志文件过大的解决方法

    MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大. 解决如下:(特别注意:启动的时候必须是--logpath指定了log路径的) 用mongo连接到服务端 复制代码 代码如下: use admin  //切换到admin数据库 db.runCommand({logRotate:1}) 这样会使mongo关闭当前日志文件,重启一个新的日志文件,不需要停止mongodb服务.

随机推荐