logback和slf4j的使用chapter3

本文介绍了Logback的日志配置方法,包括启动状态信息显示、配置文件自动重载、配置文件结构解析等内容,并通过实例展示了如何精确控制不同包的日志级别。
部署运行你感兴趣的模型镜像

一.logback启动的状态信息

1.默认情况下,是不会打印出logback启动时的状态信息,那么我们也不知道启动过程中有没有出错,如果想要显示logback的启动过程,使用下面两句话就可以了。

  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
  // print logback's internal status
  StatusPrinter.print(lc);
就可以打印出logback启动时,状态信息。从状态信息中我们可以看到logback的启动过程:打印的 状态信息如下

17:44:58,578 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml]
17:44:58,671 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:44:58,671 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17:44:58,687 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Popping appender named [STDOUT] from the object stack
17:44:58,812 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - root level set to DEBUG
17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[root]

2.除了使用statusPrinter编程式的语句打印日志信息。你还可以配置logback的配置文件来记录logback的状态日志信息。甚至是错误信息。

修改你的配置文件:在 【configuration】标签中添加一个属性【debug】,他的值设置为【true】。如下代码:

	<configuration debug="true"> 

注意:这个debug属性仅仅关联logback的状态信息,他不会影响logback配置文件的其他信息。特别是logger的级别。


二、自动重载logback的配置文件(在修改之后):
	如果我们项目是一个WEB项目的话,tomcat启动了,如果你修改了logback的配置文件,总不想重启tomcat才让
logback的配置文件生效吧,那么tomcat中的数据就会丢失。其他项目也会停止。
	那就使用configuration标签中的scan属性,并且将他的值设置为true。这样的话,当logback配置文件修改之后
重新加载logback的配置文件
	例如:
<configuration scan="true"> 
  ... 
</configuration> 
	在默认的情况下,每一分钟对logback的配置文件进行扫描一次,看看有没有改变,当然你也可以修改这个扫描的间隔
时间。使用configuration标签下的scanPeriod属性。他的单位有以下几个:milliseconds, seconds, minutes or hours.
<configuration scan="true" scanPeriod="30 seconds" > 
  ...
</configuration> 
注意:如果没有指定时间的单位的话:他的默认单位是毫秒(milliseconds),但是通常这个单位是不合理的,所以如果你修
该了默认扫描的时间的话,那就给他加上一个单位。

三、logback配置文件的语法格式:
	1.logback允许你在不需要重新编译你的代码,重新定义日志行为。
	2.对于logback的配置文件过于灵活,所以没有一个特定的DTD或者XML Schema对logback配置文件进行控制。
	3.一个基本的logback配置文件的结构:
		1)配置文件的根元素为:configuration标签
		2)在configuration标签中包含:0个或多个的appender标签,0个或多个logger标签,和最多一个root标签。
	4.如图所示:
	

四、logger配置文件标签大小写问题
	1.对于明确规则而言:logback标签名称是不区分大小写的。例如<logger>,<Logger>和<LOGGER>都是合法的并且被视为是同一个标签。
	注意:对于XML文件的规则还是要遵守的,开始标签与结束标签要相同。
	2.对于模糊规则(不明确规则)而言:除了首字母不分区大小写以外,其他字母是区分大小写的。例如<encoder>和<Encoder>是相同的,
	但是与<LOgger>是不同的。
	it is not easy to tell when a tag is associated with an explicit action and when it is associated with an implicit action
	3.注意:logback配置文件没有说明:那些标签是明确规则,那些标签是模糊规则。

 
 
五、root元素标签:
	1.它只包含一个属性:名字是level,他与logger标签中的level的属性值是一样的,他的值有TRACE,DEBUG,INFO,WARN,ERROR,OFF
	ALL,7个值之一。是不区分大小写的。
	2.他不允许有除了level之外的其他属性。
	3.与logger标签类似,root标签可以包含0个或多个<appender-ref>标签.所有appender标签通过这个appender-ref与root或者logger相关联
	从而实现打印相应格式的日志信息。

六、appender元素标签:看:logback和slf4j的使用之appender使用

七、logger元素标签:看:logback和slf4j的使用之logger使用

八、看一些例子:
	1.假如你不想看到来自“chapters.configuration”包下的任何class的任何DEBUG信息。就进行如下设置。
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <logger name="chapters.configuration" level="INFO"/>

  <!-- Strictly speaking, the level attribute is not necessary since -->
  <!-- the level of the root level is set to DEBUG by default.       -->
  <root level="DEBUG">          
    <appender-ref ref="STDOUT" />
  </root>  
  
</configuration>
	注意:chapters.configuration包下的所有类中打印的关于debug信息都不会显示。而其他任何类都可以显示DEBUG信息
	2.如何你想让chapters.configuration包下的所有类都是INFO级别,但是让chapters.configuration.Foo为DEBUG模式。
<configuration>

  <appender name="STDOUT"
    class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
     </pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration" level="INFO" />
  <logger name="chapters.configuration.Foo" level="DEBUG" />

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>
看一下各个class的级别:
		
	3.注意:打印日志信息是依赖于logger对象有效level级别触发的,而不是依赖于接触appender的logger级别触发的。打印日志的
	appender最终是通过appender-refroot或者logger相关联的。如果没有用appender-ref的话,那么设置appender是没有用的。所以
	appender是要与一个root或者logger相接触的。
<configuration>

  <appender name="STDOUT"
   class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration" level="INFO" />

  <!-- turn OFF all logging (children can override) -->
  <root level="OFF">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>
	root元素不打印任何日志信息的。并且appender是与root相接触的。但是chapters.configuration包下的所有类的级别都是INFO级别。在
	chapters.configuration都可以打印INFO级别以上的信息。并且按照STDOUT的格式打印。即appender是不管级别,而直接继承的。
	因此并不是appender-ref与那个logger相关联,那个这个appender的级别就是关联logger级别模式。appender是没有级别的,只有logger
	才有级别,appender只是定义打印的方式,和样式。
	
 
 
 
 

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

G:\Java\jdk-24\bin\java.exe "-javaagent:G:\java\IntelliJ IDEA 2024.3.5\lib\idea_rt.jar=55966" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\ideaProjects\HBase_Chapter04\target\classes;C:\Users\HUATANGQIU\.m2\repository\org\apache\hbase\hbase-shaded-client\2.0.0\hbase-shaded-client-2.0.0.jar;C:\Users\HUATANGQIU\.m2\repository\com\github\stephenc\findbugs\findbugs-annotations\1.3.9-1\findbugs-annotations-1.3.9-1.jar;C:\Users\HUATANGQIU\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\HUATANGQIU\.m2\repository\org\apache\htrace\htrace-core4\4.2.0-incubating\htrace-core4-4.2.0-incubating.jar;C:\Users\HUATANGQIU\.m2\repository\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;C:\Users\HUATANGQIU\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\HUATANGQIU\.m2\repository\org\apache\yetus\audience-annotations\0.5.0\audience-annotations-0.5.0.jar;C:\Users\HUATANGQIU\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\HUATANGQIU\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar cn.itcast.hbasedemo.namespace.GetNamespaceList SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. log4j:WARN No appenders could be found for logger (org.apache.hadoop.security.Groups). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. WARNING: A restricted method in java.lang.System has been called WARNING: java.lang.System::loadLibrary has been called by org.apache.hadoop.util.NativeCodeLoader in an unnamed module (file:/C:/Users/HUATANGQIU/.m2/repository/org/apache/hbase/hbase-shaded-client/2.0.0/hbase-shaded-client-2.0.0.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled java.lang.UnsupportedOperationException: getSubject is not supported at java.base/javax.security.auth.Subject.getSubject(Subject.java:277) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:648) at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:266) at org.apache.hadoop.hbase.security.User.getCurrent(User.java:164) at org.apache.hadoop.hbase.security.UserProvider.getCurrent(UserProvider.java:168) at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:203) at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:114) at cn.itcast.hbasedemo.connect.HBaseConnect.getConnect(HBaseConnect.java:16) at cn.itcast.hbasedemo.namespace.GetNamespaceList.main(GetNamespaceList.java:13) Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.apache.hadoop.hbase.client.Connection.getAdmin()" because "connect" is null at cn.itcast.hbasedemo.namespace.GetNamespaceList.main(GetNamespaceList.java:14) 进程已结束,退出代码为 1
最新发布
10-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值