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

有很多记录日志的方式,比如 log4j、Logging、commons-logging、slf4j 等等,这里呢我就说说我们做项目经常用到的几种。

log4j


配置文章可以看我的文章  Log4j配置详解

我用的是 log4j-1.2.15.jar 这个包,将其放在lib下

输出到控制台

log4j.properties配置

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

log4j.rootLogger= ERROR, stdout

设置日志输出类型 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

测试代码

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);

//组装日志内容

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

方便日志查看

String curTime = dfTime.format(date);

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

String curDay = df.format(date);

//组装日志内容

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-3QUkjpur-1714374575407)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值