解决jetty7.x log日志异常巨大问题

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

最近从jetty6升级到了jetty7发现硬盘空间动不动就满了,我找... 我找.... 我找原因.... 发现是jetty7 logs目录搞得鬼,仅仅是个开发环境,1天1GB的日志,疯了! 这要是弄到生产环境还不完蛋啦!!我相信jetty的开发者不会这么缺心眼的、少智慧的,于是乎googling.....


E文太差先找中文的,发现了两位网友写的文章,说jetty自己实现了log系统,需要复写这个类.....  当时晕倒,不用这么麻烦吧。。。 于是觉然的开始 googling E文,终于找到了解决办法


jetty7有两套log系统,默认使用自己的 org.eclipse.jetty.util.log 如果配置来log4j则使用log4j。


在${jetty.home}/lib/ext 放入log4j jar包


在.jettyrc中加入 (jettyrc是什么我就不解释了)


-Dlog4j.configuration=file:/home/jetty/app/jetty7/resources/log4j.properties


# This is not needed by Jetty - but it helps with many web apps.

 

log4j.rootLogger=WARN, stdout

 

log4j.appender.stdout=org.apache.log4j.RollingFileAppender

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

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %t $

log4j.appender.stdout.File=${log4j.logdir}/stderrout.log

log4j.appender.stdout.MaxFileSize=204800KB

log4j.appender.stdout.MaxBackupIndex=10


 


之后修改etc/jetty-logging.xml


<?xml version="1.0"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

 

 

<!-- =============================================================== -->

<!-- Configure stderr and stdout to a Jetty rollover log file        -->

<!-- this configuration file should be used in combination with      -->

<!-- other configuration files.  e.g.                                -->

<!--    java -jar start.jar etc/jetty-logging.xml                    -->

<!-- =============================================================== -->

<Configure id="Server" class="org.eclipse.jetty.server.Server">

 

    <New id="ServerLog" class="java.io.PrintStream">

      <Arg>

        <New class="org.eclipse.jetty.util.RolloverFileOutputStream">

          <Arg><Property name="jetty.logs" default="/var/log/jetty"/>/yyyy_mm_dd.stderrout.log</Arg>

          <Arg type="boolean">false</Arg>

          <Arg type="int">30</Arg>

          <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>

          <Get id="ServerLogName" name="datedFilename"/>

        </New>

      </Arg>

    </New>

 

    <Call class="org.eclipse.jetty.util.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>

    <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>

    <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>

 

</Configure>


30我猜是保留的文件个数,这个还有在考证

 


重启jetty,世界清爽啦!~~~


 


英文如下:


With Jetty 7.x you have 2 options.

Both require you to tell Jetty what kind of advanced logger you want to use.

* java.util.logging

* SLF4J


- java.util.logging -

Set a system property called "org.eclipse.jetty.util.log.class" to

"org.eclipse.jetty.util.log.JavaUtilLog" and from there you have all of the

standard java.util.logging configuration options to write to a file / roll

the log / etc ...


- SLF4J -

You'll want to setup SLF4J, have JettyLog use its SLF4J impl.

The mere existence of slf4j-api.jar in the classpath is enough to trigger

this behavior.

Download the slf4j-api.jar of your choice, and put it in

${jetty.home}/lib/ext

Be sure you checkout $ java -jar start.jar --version to see if it will load

into the Jetty Classpath (not your webapps)


Then you'll want to worry about how to take the SLF4J produced logging

events and route them to a logging impl you like.

Check out the docs at http://slf4j.org/ to understand how to setup slf4j.

For example: you can have SLF4J use log4j to write the logs to disk.


I personally like logback http://logback.qos.ch/ opposed to log4j, as it

allows me greater log routing control than log4j alone.

(Example: I can route all commons-logging & log4j & java.util.logging &

slf4j & stderr & stdout generated logging events to a file controlled by the

logback configuration under slf4j)


本文转自 guowang327 51CTO博客,原文链接:http://blog.51cto.com/guowang327/1770770,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
212 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
272 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1674 14
|
2月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
39 2
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
39 0
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
243 0
|
监控 Kubernetes Shell
使用阿里云日志服务采集查询kubernetes容器日志
使用阿里云日志收集查询kubernetes容器日志
2921 0
|
4月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
50 0
|
2月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
64 0