JAVA日常开发中常用的日志记录方式,攒个赞好不好?

package com.log;

import org.apache.log4j.Logger;

public class Log4jTest

{

Logger logger = Logger.getLogger(this.getClass());

public void test()

{

logger.debug(“debug print”);

logger.info(“info print”);

logger.warn(“warn print”);

logger.error(“error print”);

}

/**

  • @param args

*/

public static void main(String[] args)

{

new Log4jTest().test();

}

}

因配置的是ERROR,所以只输出error的信息

输出到日志文件

log4j.properties配置

DEBUG 日志优先级,stdout(自定义名字) 代表日志输出到那个地方

log4j.rootLogger= ERROR, stdout ,myLog

设置日志输出类型 appender负责控制日志记录操作的输出 ConsoleAppender:日志信息输出到控制台

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

日志自定义格式

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

日志输出格式为 优先级、 [产生日志事件的线程名]、日志信息、换行

log4j.appender.stdout.layout.ConversionPattern= %5p [%t] %m%n

输出到日志文件

log4j.appender.myLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.myLog.File = E:\testlog\log4j\server.log

log4j.appender.myLog.Append = true

只输出DEBUG级别以上的日志

log4j.appender.myLog.Threshold = DEBUG

#'.'yyyy-MM-dd: 每天产生一个新的文件

log4j.appender.myLog.DatePattern = '.'yyyy-MM-dd

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

log4j.appender.myLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n

log4j.additivity.myLog = false

测试代码还是之前的,运行结果如下:

自定义文本方式


每天记录一个日志文件,这个日志文件把今天比较重要的日志记录下来。

每个日志文件记录的形式(时间+组装好的内容),如下 :

是不是有个疑问,如果有多个服务器,日志是记录到代码执行的这个服务器上了,外面访问进来肯定会访问到不同的服务器上了,日志文件也肯定存在多个咯,查问题的时候不就得一个个服务器的日志都翻一遍,烦人吗不是,这个时候你请搞工程的兄弟吃个夜宵他就会告诉你,其实服务器是可以搞成共享一个目录的,多个服务器访问同一个日志文件也是可以的(具体我就不讲了),但说实话这种方式我们现在也只是偶尔用一下。

  

示意代码

package com.log;

import java.io.BufferedWriter;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

public class FileLog {

public static void writeLog(String file, String conent) {

BufferedWriter out = null;

try {

out = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream(file, true)));

out.write(conent);

out.newLine();//换行

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

  • @param args

*/

public static void main(String[] args) {

SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);

SimpleDateFormat dfTime = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

Date date = new Date();

//当前时间 方便日志查看

String curTime = dfTime.format(date);

//yyyy-MM-dd格式的,为了每日更换日志文件

String curDay = df.format(date);

//组装日志内容

String text=“日志内容”+org.apache.commons.lang.RandomStringUtils.randomNumeric(4);

String logStr=“[”+curTime+“]”+text;

//指定日志文件路径

String fileName=“E:/testlog/”+curDay+“.txt”;

System.out.println(“start”);

//打印日志

writeLog(fileName, logStr);

System.out.println(“end”);

}

}

记录到数据库


我们用的最多的场景是接口,把收发报文记录下来,如果接口发生错误的话,将错误的信息记录成一条数据。

一旦发生接口调用争议的实话,这个就派上用场了,场景:

对端是个大厂很大的那种(甲方都不吊的那种),你送了数据过去,然后对端说没收到或者说收到的有问题,但人家又不说具体什么问题,也不给报文,就做甩手掌柜,接口人只好找你了(你懂的,柿子都找软的捏),你如果没有调用报文和返回报文的记录的话,你就等着哭吧,挨骂你只能忍着,就算你确定你的程序没问题也没有用,你得有证据,你就得想方设法的找报文,但如果要从日志找的话不是那么好找,甚至有时候找不到。

记录到库就很好找,根据工单号、主键或者发生时间等等,可以很容易发现问题、定位问题,然后迅速把发送的报文、返回的报文发给接口人,手一甩就剩下你心情愉悦的摸鱼了。

我一般会记录这些信息

来源系统对端系统/自己的系统代号
业务不同的模块写不同的编码,方便区分
工单号唯一标示即可,看自己系统的需求
方法名调用的方法
类型接收或者发送
状态成功或者失败
报文具体的报文信息
操作时间创建时间

当然有可能会涉及到比较长的报文,所以我们设计的是有好几个字段来存,不够的就往后一个字段放,比如:

String xmlInfo = vo.getXmlInfo();

int xmlLength = xmlInfo.length();

int count = xmlLength / 1000;

if (count * 1000 < xmlLength)

count++;

String xmlArr[] = new String[count];

for (int i = 0; i < count; i++)

{

int endLength = (i + 1) * 1000;

if (endLength > xmlLength)

endLength = xmlLength;

xmlArr[i] = xmlInfo.substring(i * 1000, endLength);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
存中…(img-Mc44I49X-1714841017549)]

[外链图片转存中…(img-ao5pHxii-1714841017549)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值