Java中日志的使用(包含指定日志信息输出到指定地方)

一、前言

    对于我们开发者而言,日志存在的意义十分重大;本文主要是自己整理了关于日志的一些知识点,希望能帮助到需要的人,也希望各位能指出我的错误。

二、日志的作用

①  记录运行信息,方便调试

②  记录错误信息,方便排查错误

③  存储运行记录,方便后期的数据分析

三、日志的主要知识点:三大组件

1.Loggers 组件

1.1作用:

设置日志级别,决定什么日志信息应该被输出、什么日志信息应该被忽略。

1.2.分类:

DEBUG < INFO< WARN < ERROR < FATAL

一般情况下,子类中的级别设置会覆盖根root中的logger,且一般子类默认的级别为INFO,所以个人觉得根root中设置拦截级别似乎没什么作用。

1.3.例子:

         配置根Logger

log4j.rootLogger= [ level ] , appenderName1, appenderName2

         注意:根logger 具有继承性,他下属的appednerName均继承自他,比如继承了日志拦截级别等,当然,下属也可覆盖掉来着父类的日志拦截级别(Threshold)。如果不想继承,那么设置如下:log4j.additivity.org.apache=false


2.Appenders 组件

2.1.作用:

设置日志输出的位置以及其他相关的信息

2.2.语法:

(appenderName 为日志名,需要在rootlogger中声明或者使用自定义声明,自定义声明具体看指定日志信息输出到指定地方那部分;className输出的类,具体看下面;potion1=value1是其他相关的配置,比如配置输出位置,输出的级别的信息)

log4j.appender.appenderName = className 
log4j.appender.appenderName.Option1 = value1 
… 
log4j.appender.appenderName.OptionN = valueN

2.3.className 的相关类

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

2.4.例子

log4j.appender.file=org.apache.log4j.RollingFileAppender  //file输出为每日产生一个日志文件
log4j.appender.file.Threshold=DEBUG           //日志级别设置问debug(这个会覆盖父类)
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.File=./log/mina.log
log4j.appender.file.MaxFileSize=5120KB
log4j.appender.file.MaxBackupIndex=10

3.Layout组件

3.1作用:

 决定了输出日志的格式

3.2.类型

  . org.apache.log4 j.HTMLLayout(以HTML表格形式布局); 
  . org.apache.log4 j.PatternLayout(可以灵活地指定布局模式); 
  . org.apache.log4 j.SimpleLayout(包含日志信息的级别和信息字符串); 
  . org.apache.log4 j.TTCCLayout(包含日志产生的时间、线程和类别等信息);

3.3.输出格式的定义ConversionPattern

符号         描述 
    %r           自程序开始后消耗的毫秒数 
    %t           表示日志记录请求生成的线程 
    %p           表示日专语句的优先级 
    %r           与日志请求相关的类别名称 
    %c           日志信息所在的类名 
    %m%n         表示日志信息的内容

3.4.例子

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[VAMS][%d] %p | %m | [%t] %C.%M(%L)%n

三、总结例子(包含指定日志信息输出到指定地方)

1.配置文件

配置文件默认存放在src目录下,名字为log4j.properties

log4j.rootLogger=DEBUG,MINA,file,logFile    //注意包含了很多
##   mina 设置日志发送到控制台
log4j.appender.MINA=org.apache.log4j.ConsoleAppender    
log4j.appender.MINA.layout=org.apache.log4j.PatternLayout    
log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %c{1} %x - %m%n
##  File 设置日志输出到指定大小的文件 
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Threshold=DEBUG          //不继承父类的
log4j.appender.file.File=./log/mina.log       //路径
log4j.appender.file.MaxFileSize=5120KB     //大小
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[VAMS][%d] %p | %m | [%t] %C.%M(%L)%n
##    logFile  设置日志输出到指定路劲
log4j.appender.logFile=org.apache.log4j.FileAppender 
log4j.appender.logFile.Threshold=DEBUG 
log4j.appender.logFile.ImmediateFlush=true   (表示所有消息都会被立即输出)
log4j.appender.logFile.Append=true       (rue表示消息增加到指定文件中,默认就是true)
log4j.appender.logFile.File=./log/log.log4j 
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

2.简单调用

public   class  TestLog4j  {
     public   static   void  main(String[] args)  {
 PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " ); //读取配置文件路径
        Logger logger  =  Logger.getLogger(TestLog4j. class );      //加载本类
        logger.debug( " debug " );                   //设置此处debug级别输出的内容
        logger.error( " error " );                   //设置此处error级别输出的内容
}
}

★★3.将关于特定类的日志输出到特定的日志文件中

         需求:我们想将类 A 中的日志输出,输出到一个单独的特定文件中
配置:
log4j.logger.signature=debug,signature                  //自定义输出
log4j.additivity.signature= false                        //不继承父类
log4j.appender.signature = org.apache.log4j.FileAppender  //输出到指定地方
log4j.appender.signature.Append=true                  //输出不覆盖
log4j.appender.signature.File=./log/signature.log          //输出到指定地址
log4j.appender.signature.layout=org.apache.log4j.PatternLayout
log4j.appender.signature.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

使用
public void test1(){
		Logger logger = Logger.getLogger("signature");
		logger.info("testinfo");
	}

重点: 发挥主要作用的是 log4.additivity。 用于决定子logger是否继承父logger的appender。如果设置为false,那么子logger的输出只会输出到自己指定的文件/控制台下。而不会输出到父logger指定的文件/控制台下。

四、参考网址

https://blog.csdn.net/xiao_yao_ren/article/details/19558725

https://www.cnblogs.com/wangzhuxing/p/7753420.html






  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java ,我们可以通过配置日志框架来实现将特定的日志单独输出到文件。下面以常用的 Log4j2 为例说明: 1. 首先,需要在 pom.xml 文件加入 log4j2 的依赖: ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.x.x</version> </dependency> ``` 2. 在项目的 resources 目录下创建一个 log4j2.xml 配置文件,该文件包含了对日志输出的配置信息。例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <File name="LogFile" fileName="./logs/mylog.log" append="true"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> <File name="SpecialLogFile" fileName="./logs/special.log" append="true"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="LogFile"/> </Root> <Logger name="com.example.special" level="debug" additivity="false"> <AppenderRef ref="SpecialLogFile"/> </Logger> </Loggers> </Configuration> ``` 上述配置文件,定义了三个 Appenders:Console、LogFile 和 SpecialLogFile。其 Console 用于将日志输出到控制台,LogFile 用于将日志输出指定文件,SpecialLogFile 用于将特定的日志输出到另一个文件。 3. 在 Java 代码,可以使用 LogManager.getLogger() 方法获取 Logger 对象,然后使用该对象打印日志。例如: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MySpecialClass { private static final Logger logger = LogManager.getLogger("com.example.special"); public static void doSomething() { logger.debug("This is a special log message."); } } ``` 在上述代码,我们通过 LogManager.getLogger("com.example.special") 方法获取了名为 "com.example.special" 的 Logger 对象,然后使用该对象打印了一条 debug 级别的日志。由于我们在 log4j2.xml 配置文件指定了该 logger 对象的输出目的地为 SpecialLogFile,因此这条日志会被单独输出到 ./logs/special.log 文件。 至此,我们就成功地将特定的日志单独输出到文件了。需要注意的是,在实际项目,我们可能需要根据不同的需求,定制不同的日志输出方式和格式,具体配置方式可以参考 log4j2 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值