精华内容
下载资源
问答
  • 因为公司之前管理服务器的人的离职, 我们需要接手服务器,但是发现每次服务器的磁盘都被撑爆了,查其原因是因为日志太大, 这不是分割日志的最终原因,最终原因是:像tomcat中我们用于输出的catalina.out 文件太大....

           因为公司之前管理服务器的人的离职, 我们需要接手服务器,但是发现每次服务器的磁盘都被撑爆了,查其原因是因为日志太大, 这不是分割日志的最终原因,最终原因是:像tomcat中我们用于输出的catalina.out 文件太大.不利于我们后续产品上线 出现问题,进行快速的定位, 从几个G的日志里进行操作是一件很痛苦的事情,所以我决定对tomcat进行日志分割;

          首先说到日志系统,我们自己的程序里有一套日志系统,  tomcat自带的有一套日志系统, 像我的系统里的日志是logback, 我们把logback.xml进行配置, 系统就会根据你的配置, 进行日志的管理, 我把我现在正在用的logback.xml 代码贴上来,仅供参考;

         logback.xml:

        <configuration>
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>../logs/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
          <fileNamePattern>../logs/logback.%i.log.zip</fileNamePattern>
          <minIndex>1</minIndex>
          <maxIndex>60</maxIndex>
        </rollingPolicy>


        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
          <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
          <pattern>%date{YYYY-MM-dd HH:mm:ss} %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
      </appender>


      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
          <pattern>%date{YYYY-MM-dd HH:mm:ss} %level %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
      </appender>


      <root level="INFO">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
      </root>


      <logger name="***" level="DEBUG" additivity="true"></logger>
      <!-- <logger name="org.hibernate" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT" /> </logger> -->
    </configuration>

    上面的意思是:对于整个项目我们采用标准的输出格式(STDOUT), 如果日志过多,也就是俗称滚动日志(RollingFileAppender),我们会进行压缩分割, 每天产生的日志大于等于10M就进行压缩(SizeBasedTriggeringPolicy), 而且这个压缩的日志最多存60个.

    上面的截图是保存在tomcat下面的,压缩文件显示不是10M但是解压出来是10M;

    除了系统上使用的日志系统,tomcat自己还有自己的日志系统;

    但是我们分割日志,需要做的就是要把catalina.out进行每天分割;

    我们需要先安装cronolog-1.6.2.tar; 地址:链接: https://pan.baidu.com/s/1dE20WQd 密码: 3vjf

    安装步骤是:

     ./configure
        make
        make install

    我们进入tomcat-->bin  找到catalina.sh

    vi catalina.sh

    找到org.apache.catalina.startup.Bootstrap “$@” start  \ >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 

    修改为: org.apache.catalina.startup.Bootstrap “$@” start 2>&1 \ 
    | /usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.%Y-%m-%d.out >> /dev/null & 

    重启tomcat即可.

    最后贴图,我们现在分割后的:



    上面说完后,下面还需要说一下logback应该注意的点:

       我们可以通过设置logback.xml配置文件进行控制日志,他也会生成日志文件供我们看日志的信息,但是像我们常用的Excepiton.printStackTrace();就不会打印在logback.log文件中,引用别人的话: " e.printStackTrace();通常我们都会去这样找到出错的信息,而打印的出错的信息栈,因为会输出到std.err中,所以在我们自己定义的日志文件中是不能够找到的,为了解决这个问题,可以通过如下代码解决:"

    代码如下:  这个是个工具类

      public class LogException {
       
    public static String getStack(Throwable t) {
    StringWriter sw = null;
    PrintWriter pw = null;
    try {
    sw = new StringWriter();
    pw = new PrintWriter(sw);
    t.printStackTrace(pw);
    pw.flush();
    sw.flush();
    } finally {
    if (sw != null) {
    try {
    sw.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    if (pw != null) {
    pw.close();
    }
    }

    return sw.toString();
    }
    }

    e.printStackTrace()栈信息是不会输出到logback.log中经过上面工具类的转化才可以打印出来.


    展开全文
  • Logback是对log4j的升级版,有着更快的速度和更少的内存占用。Logback有三个模块:1.logback-core:...3. Logback-access:该模块Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。在Web应用程序中应用s...

    Logback是对log4j的升级版,有着更快的速度和更少的内存占用。

    Logback有三个模块:

    1.logback-core:日志处理核心组件

    2. Logback-classic:该模块可以视为log4j的显著改进版本,同时实现了slf4j api。

    3. Logback-access:该模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。

    在Web应用程序中应用slf4j和logback

    1.导入相关jar包到WEB-INF/lib下(如果是Maven工程请忽视这一步)

    dd2f1b316305

    2. Maven工程中添加Logback依赖项到pom.xml中。

    ```

    ch.qos.logback

    logback-classic

    1.0.13

    ```

    3. XML配置

    ```

    %d {HH:mm:ss.SSS} [%thread]%-5level%logger {36} - %msg%n Pattern>

    layout>

    appender>

    root>

    configuration>

    ```

    注意到一个记录器是在包级别定义的(“com.base22”)。您可以简单地更改它以匹配您的应用程序的包基础。如果需要,您还可以声明其他记录器(包和/或类)。

    4. 将日志记录代码放到类中:

    ```

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    ```

    在类顶部添加一下内容(在声明类公共类的行下面),在getLogger方法中调用中更改类的名称(MyClassName)。

    ```

    static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);

    ```

    可以在代码中的某些位置设置一些日志记录语句,在运行应用程序时它们会立即被执行。

    ```

    LOG.trace("Hello World!");

    LOG.debug("How are you today?");

    LOG.info("I am fine.");

    LOG.warn("I love programming.");

    LOG.error("I am programming.");

    ```

    下面是一个简单的测试程序:

    ```

    public class SLF4JConsoleTest {

    static final Logger LOG = LoggerFactory.getLogger(SLF4JConsoleTest.class);

    public static void main(String[] args) {

    SLF4JConsoleTest console = new SLF4JConsoleTest();

    console.execute();

    }

    public SLF4JConsoleTest() {

    }

    public void execute() {

    if (LOG.isTraceEnabled()) {

    LOG.trace("Test: TRACE level message.");

    }

    if (LOG.isDebugEnabled()) {

    LOG.debug("Test: DEBUG level message.");

    }

    if (LOG.isInfoEnabled()) {

    LOG.info("Test: INFO level message.");

    }

    if (LOG.isWarnEnabled()) {

    LOG.warn("Test: WARN level message.");

    }

    if (LOG.isErrorEnabled()) {

    LOG.error("Test: ERROR level message.");

    }

    }

    }

    ```

    展开全文
  • 日志体系-logback

    2019-10-19 09:25:44
    参考 logback介绍 背景 logback来源于log4j,有着更好的性能更好的速度,包含了很多独特的特性 ...logback-access:与tomcat等servlet服务器继承提供远程访问 logback基本使用 package chapters...

    参考

    logback介绍

    背景

    1. logback来源于log4j,有着更好的性能与更好的速度,包含了很多独特的特性
    2. logback包含3个部分
    • logback-core:核心部分,是否两个部分的基础
    • logback-classic:log4j的改进优化
    • logback-access:与tomcat等servlet服务器继承提供远程访问

    logback基本使用

    package chapters.introduction;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HelloWorld1 {
    
        public static void main(String[] args) {
            Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
            logger.debug("hello world");
        }
    }
    

    需要引入的依赖包:classpath 添加 slf4j-api.jar、logback-core.jar 以及 logback-classic.jar。

    1. 根据前一节发展历程可知:slf4j-api对应于slf4j的门面,而logback-core与logback-classic则是用于做基本实现包
    2. LoggerFactory与Logger都是SLf4j中的类

    Logback的系统运行状态

    package chapters.introduction;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import ch.qos.logback.classic.LoggerContext;
    import ch.qos.logback.core.util.StatusPrinter;
    
    public class HelloWorld2 {
    
        public static void main(String[] args) {
            Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
            logger.debug("Hello world");
    
            // 打印内部的状态
            LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
            StatusPrinter.print(lc);
        }
    }
    22:39:20.241 [main] DEBUG chapters.introduction.HelloWorld1 - hello world
    22:39:20,179 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
    22:39:20,179 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
    22:39:20,179 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
    22:39:20,194 |-INFO in ch.qos.logback.classic.BasicConfigurator@28c97a5 - Setting up default configuration.
    
    1. Logback通过一个状态系统来报告本身的状态信息,发生在logback生命周期中的事件可以通过StatusManager来获取
    2. 注意Loggercontext来源于包classical中
    3. StatusPrinter打印上下文
    4. 根据打印结果可以看出寻找配置的过程
    5. 默认配置会创建一个ConsoleAppender,可以根据情况输出到入文件,TCP以及console等各种日志目的地。用户可以根据自己的情况创建Appender。

    Logback的架构

    1.Logback主要分为三个类:logger、Apennder、layout。其中classic中才有logger,而core中包含后两者,且无logger的概念

    LoggerContext

    1. 日志的优点相对于直接输入流在于它可以输出一些日志,又不输出一部分日志。存在一个日志空间用于管理其中的所有日志,所有logger都受这个空间所管理。
    2. 一个Logger被当做一个实体,命名敏感遵循一个树状规则。
    3. 日志空间基于类似于包名,com.zmm中的logger就是com.zmm.child的父级别。是com.zmm.child.son的祖先级别。注意此处的包名是大小写敏感的。
    4. root logger 作为 logger 层次结构的最高层。它是一个特殊的 logger,因为它是每一个层次结构的一部分。每一个 logger 都可以通过它的名字去获取。例:
    5. Logger接口中主要的方法有
    package org.slf4j; 
    public interface Logger { 
      public void trace(String message);
      public void debug(String message);
      public void info(String message); 
      public void warn(String message); 
      public void error(String message); 
    }
    

    Logger Level

    1. 日志分为不同的等级,这些等级定义在ch.qos.logback.classic.Level,是不能够继承的类
    2. 如果Logger没有指定一个层级,就会继承祖先的层级直到找到一个明确的祖先层级,root的默认层级为DEBUG
    3. Logger打印的方法需要大于等于当前Logger的等级。所以关键在于日志等级排序。各级别的排序为:TRACE < DEBUG < INFO < WARN < ERROR。
    4. 例子如下:
        public static void main(String[] args) {
    
            // ch.qos.logback.classic.Logger 可以设置日志的级别
            // 获取一个名为 "com.foo" 的 logger 实例
            ch.qos.logback.classic.Logger logger = 
                    (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("com.foo");
            // 设置 logger 的级别为 INFO
            logger.setLevel(Level.INFO);
    
            // 这条日志可以打印,因为 WARN >= INFO
            logger.warn("警告信息");
            // 这条日志不会打印,因为 DEBUG < INFO
            logger.debug("调试信息");
    
            // "com.foo.bar" 会继承 "com.foo" 的有效级别
            Logger barLogger = LoggerFactory.getLogger("com.foo.bar");
            // 这条日志会打印,因为 INFO >= INFO
            barLogger.info("子级信息");
            // 这条日志不会打印,因为 DEBUG < INFO
            barLogger.debug("子级调试信息");
        }
    

    Logger对象获取

    通过 LoggerFactory.getLogger() 可以获取到具体的 logger 实例,名字相同则返回的 logger 实例也相同。(工厂模式),这样生产的同样名称的logger对象是相同的。

    Logger x = LoggerFactory.getLogger("wombat");
    Logger y = LoggerFactory.getLogger("wombat");
    

    x与y是相同的对象,并且即使后生成父对象,任然会生成上述的继承等级。
    推荐使用但类的全限定名来对 logger 进行命名,是目前最好的方式,没有之一。方便看出打印日志所在的类

    Appender与layout

    1. Appender:对于Logback框架来说输出目的地即为Appender,一个logger可以有多个Appender。logger可以调用addAppender()来增加Appender,对于每一个日志都会输出到所有Appender
    2. Appender:具有叠加性,如果 root logger 添加了一个 console appender,所有允许输出的日志至少会在控制台打印出来。如果再给一个叫做 L 的 logger 添加了一个 file appender,那么 L 以及 L 的子级 logger 都可以在文件和控制台打印日志。
    3. Layout:日志输出格式,PatternLayout通过格式化输出日志类似于C语言的Printf函数。

    日志打印性能

    参数化日志

    1. 会有日志中参数拼接的损耗
    2. 推荐使用logger.isDebugEnabled()进行判断
    3. 日志格式化的方法:logger.debug(“asaf{}”,xx);这样子的方法能够在不打印日志的时候提高性能

    底层设计

    如下简述名为com.zmm的logger.info()的流程

    1. 过滤器责任链,通过每一条日志请求信息,进行过滤,如果过滤器返回的是Filter.DENY,那么这条日志就被丢弃,如果是FilterReply.neutral则会继续执行下一步。如果为ACCEPT则直接执行第3步
    2. 应用基本规则:比较应用有效级别与日志请求级别,如果符合则进入下一步,否则就丢弃日志
    3. 创建事件对象:LoggerEvent对象被创建,此对象存在此次日志打印的所有相关信息,包含当前时间,当前线程以及当前类的各种信息
    4. 输入日志:当事件创立完毕,Logback会调用该logger的上下文中的所有Appender,并且调用该Appender.doAppend()。其中append()方法是线程安全的。
    5. 格式化日志新消息:appender对象负责格式化日志,但是如果比较复杂的格式化会给layout对象进行格式化返回一个字符串,比如SocketAppender并不会把日志时间转变为一个字符串,而是进行序列化,所以不需要layout。
    6. 发送到指定介质。

    UML流程如下
    image

    展开全文
  • 没有logback配置的日志。 原来是没有catalina.out这个文件 刚开始以为catalina.log catalina.out 是一样的。原来还是不一样的。记录一下。 下面附上windows配置catalina.out 的链接 引用:...

    今天遇到一个坑。发现windows catalina.log只有启动日志。没有logback配置的日志。

    原来是没有catalina.out这个文件

    刚开始以为catalina.log 与catalina.out 是一样的。原来还是不一样的。记录一下。

    下面附上windows配置catalina.out 的链接

    引用:https://blog.csdn.net/sanshipianyezi/article/details/78842426

    展开全文
  • 但是,一开始就有这些烦人的Tomcat日志,它们独立于我们的应用程序日志且不可自定义: Nov 24, 2012 11:44:02 PM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHa...
  • logback不打印日志

    2018-07-15 22:41:00
    最近用spring boot集成logback日志时,遇到logback不打印日志。 但是在idea下调试,本地虚拟机的tomcat能正常打印。最后得出是由于我服务器中jkd(为1.7)不是1.8导致的.用服务器tomcat指定jdk1.8正常打印日志 ...
  • Tomcat启动和运行的时候SSM等框架中DEBUG级别的日志不断狂刷,导致日志文件剧增,磁盘没几天就爆了。 针对这个问题在网上找了好多方法: log4j.logger.org.springframe=OFF 都是没有效果或者治标不治本的。一直...
  • 项目原来使用logback作为打印日志框架,添加activemq后,不打印日志了。 启动时tomcat报jar包冲突: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/E:/apache-tomcat...
  • 文章目录一、 ArrayBlockingQueue 的使用1、异步日志打印模型概述2、异步日志与具体实现(1) 异步日志 一、 ArrayBlockingQueue 的使用     logback 异步日志打印中 ArrayBlockingQueue 的使用...
  • 但是,开头有这些烦人的Tomcat日志我们的应用程序日志无关,并且不可自定义: Nov 24, 2012 11:44:02 PM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-bi...
  • logback日志的使用

    2020-03-05 21:19:27
    Tomcat解惑 之 CATALINA_HOMECATALINA_BASE catalina.home指向公用信息的位置,就是bin和lib的父目 录。 catalina.base指 向每个Tomcat目 录私有信息的位置,就是conf、logs、temp、webapps和work...
  • 原帖:我有一个在tomcat上运行的spring mvc应用程序我用gradle(3.0)构建我的应用程序我刚刚安装了slf4j,但它只记录到catalina.out(post 无法找到logback.xml相同 )我已将logback.xml文件放在我的'project \\ ...
  • 最后发现是由于logback-classic 和 slf4j-apislf4j-core jar包冲突导致 logback中已经包含slf4j中的类包 所以无需再次添加slf4j相关jar包 将tomcat webapp项目文档lib中的slf4j相关的jar包删除即完成了配置  ...
  • Java日志框架梳理-SLF4J+logback

    千次阅读 2017-07-30 15:05:28
    logback-core、logback-classic、logback-access,logback-core是其他模块的基础设施,其他模块基于它构建,logback-classic时log4j的一个改进版,它完整实现了SLF4J,logback-access主要作为一个Servlet容器交互...
  • logback-access 的使用,如果将tomcat 默认的日志输出换成logback,则需要提供这两个jar 包。将logback-access.jar logback-core.jar 复制到 $TOMCAT_HOME/lib/目录下
  • 在一个web项目中使用Logback作为日志组件,当初以tomcat7作为web容器时,日志可以正常输出,后来把tomcat7换成Jboss As 7之后,找不到系统日志。GOOGLE了一下,找到一个解决办法: 在META-INF或WEB-INF文件夹下,...
  • 日志使用logback进行记录,存放位置在${Catalina_Home}/appLogs/letter目录中 如,记录的当天日志为:${Catalina_Home}/appLogs/letter/letter.log   首先修改本地Host文件,增加一个IP网址的对应关系(网址爱...
  • logback 的 access 模块

    2020-05-06 23:02:29
    官方提供的log4j.properties转换成logback.xml ...logback-access模块Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。 1. 将logback...
  • Springboot + Logback配置

    2019-02-11 20:54:55
    Springboot的默认日志框架...logback-access:主要作为Servlet容易交互的模块,比如tomcat/jetty提供一些HTTP访问相关的功能 &amp;lt;configuration scan=&quot;true&quot; scanPeriod=&quot;6...
  • 1. 验证logback配置 1.1. 启动tomcat,得到CATALINA_BASE地址: 1.2 访问接口,查看日志 浏览器打开http://localhost:18080/o2o/superadmin/listarea 控制台输出日志 debug.log 2019-09-23 20:42:16.910...
  • 把以前的一个老项目通过maven的方式搭了一下,tomcat启动时,打印信息特别多,当时判断日志显示级别应该是debug.但我配置之前没有任何改变,所以问题应该出在pom.xml上,于是网上查找资料,发现还真有类似的情况,...
  • Logback 主要由三个模块组成:logback-core logback-classic logback-accesslogback-core 提供了一些关键的通用机制。...logback-access 主要作为一个 Servlet 容器交互的模块,比如说 tomcat 或者 jett...
  • 最后但绝非最不重要的是,作为logback发布包的一部分,logback-access模块可Jetty或者Tomcat进行集成,提供了非常丰富而强大的通过HTTP访问日志的功能。因为logback-access模块是logback初期设计方案中的一部分,...
  • 两种配置文件将日志输送到elk平台2.1. #vim log4j.properties 添加以下内容(/usr/local/apache-tomcat-7.0.69/webapps/application/WEB-INF/classes)log4j.rootLoggerlog4j.rootLogger=info,stdout,info,debug,error...
  • spring boot 知识点

    2018-11-02 16:13:00
    1. 简化配置,spring boot 提供了默认配置 例如 日志 默认logback日志 info级别 2. 简化部署,内嵌容器,tomcat,jetty,直接部署jar到服务器上就行 1.Spring Boot中application.ymlbootstrap.yml的区别 ...
  • --演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring Boot 监控和度量47:09 --Spring Boot内置的监控点、自定义的监控状况检查、自定义度量统计,输出等等 24 Spring Boot ...
  • 1. Spring Boot简介  Spring Boot是由Pivotal团队... Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录。 2. Spring Boot快速搭建 2.1 Maven项目构建  Maven构建网址:http://start.spring.io...
  • --演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring Boot 监控和度量47:09 --Spring Boot内置的监控点、自定义的监控状况检查、自定义度量统计,输出等等 24 Spring Boot ...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

tomcat日志与logback日志