log4j

在 Linux 服务器上配置 WEB 应用程序的日志打印到指定文件

一笑奈何 提交于 2020-04-06 19:47:30
服务器环境是 RedHat Linux, 其上运行的是 Apache + Tomcat,容器中运行的是我们公司的壹个小型电子商务网站,原来项目里的日志信息都是直接随着 Tomcat 容器壹起打印到 /tomcat/logs/catalina.out 中,与服务器本身的日志混合在壹起,特别难看,尤其当日志信息很多时,总是把重要的信息给冲掉了。感觉特别不爽。于是从两个月前开始,我就想把这个问题给解决下,思路就是给应用程序单独配置日志的输出方式,将其重定向到指定的日志文件,这样,我们可以简单的通过查看日志文件的方式来了解代码运行过程中可能存在的问题。 应用程序原来使用的是 LOG4J 来打印日志信息,查了下相关资料,最后我决定选用 Rolling File Appender,因为这种方式打印日志,当日志容量达到指定值时,如100MB,会自动重新生成壹个新的文件,并把原来的100MB 文件备份,这样,就可以将某一段时间内的日志信息都保留在服务器上,对于服务器维护很有帮助。 项目中的 log4j.properties 配置信息如下: log4j.rootLogger=DEBUG, ROLLING_FILE log4j.additivity.org.apache=true log4j.appender.ROLLING_FILE=org.apache.log4j

天呐,一个简单的统一日志格式我踩了多少坑

大兔子大兔子 提交于 2020-04-05 21:55:40
天呐,一个简单的统一日志格式我踩了多少坑 这几天接到一个需求,是要求将 log4j 的配置文件统一封装到 jar 文件,同时这个 jar 依赖 skywalking 的相关包,从大的层面上来说,为了统一整个公司的日志输出格式,便利的接入 skywalking 和 elk 做准备。 我是怎么考虑的 全局格式统一,也就是说需要约束好 log4j2.xml 的文件位置 由于我们现有的日志文件位置是写死在 log4j2.xml 的 ,现在并不想调整该文件的内容,但是每个应用的日志应该在单独的文件夹下,所以需要在xml配置文件中配置一个变量用来设置应用名称。 不同的环境对代码中日志的输出级别不同 例如在开发环境中,我们需要对 sql 日志进行输出,但是在生产环境中,由于性能和日志量的问题,并不会输出 sql 的日志信息。 配置要简单 配置是需要有学习成本的,最好能够不需要单独的配置就能够完成日志的统一 兼容 读取配置文件的方式要兼容,例如项目中可能存在配置文件为 yml 、 properties ,而且命名方式可能千奇百怪,应该对各个应用做最大程度上的兼容 文档 提供一定程度的文档,指导能够个性化配置一些内容 研究相关技术 log4j2 SpringBoot Logging SpringBoot 生命周期 整个开发的主要做法 如何读取配置文件内容 熟悉 Spring 的朋友应该知道,

Mybatis(二):怎样使用Mybatis

无人久伴 提交于 2020-04-02 23:12:27
一、创建项目(本文以Idea基于Maven构建的项目为例) New——>Project 笔者这里是选择自己本地的Maven及配置 最后点击Finish即可 二、在配置文件中添加依赖包 pom.xml配置文件中添加Mybatis、JDBC驱动、log4j日志管理的包依赖 完整代码如下: <?xml version="1.0" encoding="UTF-8"?> <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.zhurouwangzi</groupId> <artifactId>MybatisDemo</artifactId> <version>1.0-SNAPSHOT</version> <name>MybatisDemo</name> <!-- FIXME change it to the project's website --

阿里云-ONS-Help-SDK参考-TCP协议-JavaSDK-[mq-demo-master]:InetillJIDEA log

ⅰ亾dé卋堺 提交于 2020-03-30 00:22:25
ylbtech-阿里云-ONS-Help-SDK参考-TCP协议-JavaSDK-[mq-demo-master]:InetillJIDEA log 1. 返回顶部 · "C:\Program Files\Java\jdk-14\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.4\lib\idea_rt.jar=63252:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.4\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\mq-demo-master2\mq-demo-master\tcp\java-tcp-demo\target\classes;C:\Users\Administrator\.m2\repository\com\aliyun\openservices\ons-client\1.8.4.Final\ons-client-1.8.4.Final.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring\2.5.6.SEC03\spring-2.5.6.SEC03.jar;C:\Users

仿log4j 写 log 代码

我的梦境 提交于 2020-03-28 15:29:48
log4j 一直有个问题无法满足我,有可能我还不知道怎么去使用它。 就是他会把项目中所有的日志信息都记到一个文件里面,而业务系统往往需要根据某个业务流程查看日志分析。 public class BusinessLogUtil { public enum Level { ERROR(40, "ERROR"), WARN(30, "WARN"), INFO(20, "INFO"), DEBUG(10, "DEBUG"), TRACE(0, "TRACE"); private int levelInt; private String levelStr; private Level(int i, String s) { this.levelInt = i; this.levelStr = s; } public int toInt() { return this.levelInt; } @Override public String toString() { return this.levelStr; } } /** * 得到记录日志所有的文件:行号 * * @return */ private static String getLineInfo() { StackTraceElement ste = new Throwable().getStackTrace()[3]; return

日志Log4j使用

痞子三分冷 提交于 2020-03-27 19:09:31
1、导入Log4j的包 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> 2、配置Log4j.properties #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file

logback的配置

假如想象 提交于 2020-03-26 11:17:17
log back 是log4j的豪华升级版,项目中一般使用Log Back 作日志打印 一、组件介绍 Logger : 日志记录器,在Logger上可以定义日志记录的级别,类型等! Appender : 日志追加器,只要定义日志输出的目的地,输出到控制台还是到文件还是到其他的进程等!        通常必须传入name(appender的名称,可以自定义),class(append的实现类,可以使用系统的实现类或用自己定义的实现类) Layout : 日志的样式!日志会参照layout的格式,进行格式化输出! 二、配置实例 在项目的resources 目录下创建logback.xml文件 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 --> <property name="LOG_HOME" value="/tmp/logs/" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder

依赖冲突解决办法

倖福魔咒の 提交于 2020-03-25 14:54:43
3 月,跳不动了?>>> maven 的价值 Java开发中,jar的管理由maven来管。maven做的事情: jar 统一管理: jar 包统一管理在仓库中。统一管理自然要给每个jar包进行“编址”,它主要采用 groupId+artifactId+version三级寻址方案(当然也有classifier)。统一管理带来好处的同时,带来了麻烦,麻烦是仓库是“单点”,为了避免这个瓶颈,maven 客户端配置可以支持镜像仓库(mirrors)机制。 依赖传递: 当我们的程序依赖A,我们引用A就好;但是实际上A又依赖B和C,我们不用再琐碎的依赖B和C了,这个maven会解析A中的pom.xml,并传递的拉取子级依赖。 “依赖传递”让开发者省去很多琐碎的心思。但它方便的同时,可能带来一些麻烦——依赖冲突。 依赖冲突 所谓“依赖冲突”如下图所示: 依赖冲突.jpg 图中,我们的程序依赖A,那么我们在pom.xml中配置: < dependency > < groupId > org.example </ groupId > < artifactId > A </ artifactId > < version > ${version} </ version > </ dependency > 实际上,A它依赖B和C (这个在A的pom.xml中会有描述)。B再依赖X和Y;C依赖Y和Z

Nodejs线上日志部署

丶灬走出姿态 提交于 2020-03-24 11:58:27
Nodejs 被越来越多的使用到线上系统中,但线上系统没有日志怎么行呢。 一、forever记录日志 我的线上系统使用forever来启动服务,最开始就直接使用了forever来记录 forever start -a -l ./logs/forever.log   -a 表示追加日志文件 -l 指定日志文件   -s 忽略console.log输出的日志记录(使用log4j时要用这个) 最开始还挺好的,所有日志都能记录下来,但是既然是线上环境,日志比较多,跑着跑着就出问题了。 forever.log文件变得越来越大,在我的系统里直接占了3GB的内存,而且全在内存里面,然后服务器就报警了。 然后尝试对forever.log文件进行切割,结果这SB玩意更本没法切割,具体问题: 1.对forever.log 重命名 forever.log.bak 然后新建forever.log,结果日志仍然往forever.log.bak里写,内存一点也没减少 2.直接删除forever.log ,forever不会新建forever.log,占用的内存也一直不释放 似乎是forever一直使用着文件句柄根本不释放就往里面写,根本没法做日志切割。 二、log4j记录日志 log4j是nodejs的一个log日志包,具体使用方法就不说了,只说怎么配置和分割日志 1 { 2 "appenders": [ 3

Log4j 2.0在开发中的高级使用详解

限于喜欢 提交于 2020-03-24 11:25:35
3 月,跳不动了?>>> log4j与slf4j、logback比较 而log4j slf4j logback就是目前主流的日志框架。但后两者效率高是第一个。推荐使用:slf4j 或者 logback(spring-boot默认日志实现) log4j是apache实现的一个开源日志组件。(Wrapped implementations) logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(Native implementations) 上图可以看到应用程序对日志框架的调用关系。应用程序调用slf4j api,而日志的输出最终是由底层的日志框架来实现的。这张图也提现了log4j和logback的不同。 logback是直接实现了slf4j的接口,是不消耗内存和计算开销的。 而log4j不是对slf4j的原生实现,所以slf4j api在调用log4j时需要一个适配层。 总结: slf4j是java的一个日志门面,实现了日志框架一些通用的api,log4j和logback是具体的日志框架。 他们可以单独的使用,也可以绑定slf4j一起使用。 单独使用。分别调用框架自己的方法来输出日志信息。 绑定slf4j一起使用。调用slf4j的api来输入日志信息,具体使用与底层日志框架无关(需要底层框架的配置文件)