Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaÈÕÖ¾¿ò¼Ü£ºlogbackÏê½â
 
  2473  次浏览      27
 2019-5-21
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ¸öÈ˲©¿Í£¬±¾ÎÄÖ÷Òª½éÉÜÁËJavaÈÕÖ¾¿ò¼Ülogback£¬²¢·ÖÎöÒ»ÏÂlogback¼ÓÔØ¹ý³ÌÒÔ¼°ÅäÖã¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

ΪʲôʹÓÃlogback

¼ÇµÃǰ¼¸Ä깤×÷µÄʱºò£¬¹«Ë¾Ê¹ÓõÄÈÕÖ¾¿ò¼Ü»¹ÊÇlog4j£¬´óÔ¼´Ó16ÄêÖе½ÏÖÔÚ£¬²»¹ÜÊÇÎÒ²ÎÓëµÄ±ðÈËÒѾ­´î½¨ºÃµÄÏîÄ¿»¹ÊÇÎÒ×Ô¼ºÖ÷µ¼µÄÏîÄ¿£¬ÈÕÖ¾¿ò¼Ü»ù±¾¶¼»»³ÉÁËlogback£¬×ܽáһϣ¬logback´óÔ¼ÓÐÒÔϵÄһЩÓŵ㣺

ÄÚºËÖØÐ´¡¢²âÊÔ³ä·Ö¡¢³õʼ»¯ÄÚ´æ¼ÓÔØ¸üС£¬ÕâÒ»ÇÐÈÃlogbackÐÔÄܺÍlog4jÏà±ÈÓÐÖî¶à±¶µÄÌáÉý

logback·Ç³£×ÔÈ»µØÖ±½ÓʵÏÖÁËslf4j£¬Õâ¸öÑϸñÀ´ËµËã²»ÉÏÓŵ㣬ֻÊÇÕâÑù£¬ÔÙÀí½âslf4jµÄǰÌáÏ»áºÜÈÝÒ×Àí½âlogback£¬Ò²Í¬Ê±ºÜÈÝÒ×ÓÃÆäËûÈÕÖ¾¿ò¼ÜÌæ»»logback

logbackÓÐ±È½ÏÆëÈ«µÄ200¶àÒ³µÄÎĵµ

logbackµ±ÅäÖÃÎļþÐÞ¸ÄÁË£¬Ö§³Ö×Ô¶¯ÖØÐ¼ÓÔØÅäÖÃÎļþ£¬É¨Ãè¹ý³Ì¿ìÇÒ°²È«£¬Ëü²¢²»ÐèÒªÁíÍâ´´½¨Ò»¸öɨÃèÏß³Ì

Ö§³Ö×Ô¶¯È¥³ý¾ÉµÄÈÕÖ¾Îļþ£¬¿ÉÒÔ¿ØÖÆÒѾ­²úÉúÈÕÖ¾ÎļþµÄ×î´óÊýÁ¿

×ܶøÑÔÖ®£¬Èç¹û´ó¼ÒµÄÏîÄ¿ÀïÃæÐèҪѡÔñÒ»¸öÈÕÖ¾¿ò¼Ü£¬ÄÇôÎÒ¸öÈ˷dz£½¨ÒéʹÓÃlogback¡£

logback¼ÓÔØ

ÎÒÃǼòµ¥·ÖÎöÒ»ÏÂlogback¼ÓÔØ¹ý³Ì£¬µ±ÎÒÃÇʹÓÃlogback-classic.jarʱ£¬Ó¦ÓÃÆô¶¯£¬ÄÇôlogback»á°´ÕÕÈçÏÂ˳Ðò½øÐÐɨÃ裺

ÔÚϵͳÅäÖÃÎļþSystem PropertiesÖÐѰÕÒÊÇ·ñÓÐlogback.configurationFile¶ÔÓ¦µÄvalue

ÔÚclasspathÏÂѰÕÒÊÇ·ñÓÐlogback.groovy£¨¼´logbackÖ§³ÖgroovyÓëxmlÁ½ÖÖÅäÖ÷½Ê½£©

ÔÚclasspathÏÂѰÕÒÊÇ·ñÓÐlogback-test.xml

ÔÚclasspathÏÂѰÕÒÊÇ·ñÓÐlogback.xml

ÒÔÉÏÈκÎÒ»ÏîÕÒµ½ÁË£¬¾Í²»½øÐкóÐøÉ¨Ã裬°´ÕÕ¶ÔÓ¦µÄÅäÖýøÐÐlogbackµÄ³õʼ»¯£¬¾ßÌå´úÂëʵÏֿɼûch.qos.logback.classic.util.ContextInitializerÀàµÄfindURLOfDefaultConfigurationFile·½·¨¡£

µ±ËùÓÐÒÔÉÏËÄÏî¶¼ÕÒ²»µ½µÄÇé¿öÏ£¬logback»áµ÷ÓÃch.qos.logback.classic.BasicConfiguratorµÄconfigure·½·¨£¬¹¹ÔìÒ»¸öConsoleAppenderÓÃÓÚÏò¿ØÖÆÌ¨Êä³öÈÕÖ¾£¬Ä¬ÈÏÈÕÖ¾Êä³ö¸ñʽΪ¡±%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} ¨C %msg%n¡±¡£

logbackµÄconfiguration

logbackµÄÖØµãÓ¦µ±ÊÇAppender¡¢Logger¡¢Pattern£¬ÔÚÕâ֮ǰÏȼòµ¥Á˽âÒ»ÏÂlogbackµÄ<configuration>£¬<configuration>Ö»ÓÐÈý¸öÊôÐÔ£º

scan£ºµ±scan±»ÉèÖÃΪtrueʱ£¬µ±ÅäÖÃÎļþ·¢Éú¸Ä±ä£¬½«»á±»ÖØÐ¼ÓÔØ£¬Ä¬ÈÏΪtrue

scanPeriod£º¼ì²âÅäÖÃÎļþÊÇ·ñÓÐÐ޸ĵÄʱ¼ä¼ä¸ô£¬Èç¹ûûÓиø³öʱ¼äµ¥Î»£¬Ä¬ÈÏΪºÁÃ룬µ±scan=trueʱÕâ¸öÖµÉúЧ£¬Ä¬ÈÏʱ¼ä¼ä¸ôΪ1·ÖÖÓ

debug£ºµ±±»ÉèÖÃΪtrueʱ£¬½«´òÓ¡³ölogbackÄÚ²¿ÈÕÖ¾ÐÅÏ¢£¬ÊµÊ±²é¿´logbackÔËÐÐÐÅÏ¢£¬Ä¬ÈÏΪfalse

<logger>Óë<root>

ÏÈ´Ó×î»ù±¾µÄ<logger>Óë<root>¿ªÊ¼¡£

<logger>ÓÃÀ´ÉèÖÃijһ¸ö°ü»òÕß¾ßÌåijһ¸öÀàµÄÈÕÖ¾´òÓ¡¼¶±ð¡¢ÒÔ¼°Ö¸¶¨<appender>¡£<logger>¿ÉÒÔ°üº¬Áã¸ö»òÕß¶à¸ö<appender-ref>ÔªËØ£¬±êʶÕâ¸öappender½«»áÌí¼Óµ½Õâ¸ölogger¡£<logger>½öÓÐÒ»¸önameÊôÐÔ¡¢Ò»¸ö¿ÉÑ¡µÄlevelÊôÐÔºÍÒ»¸ö¿ÉÑ¡µÄadditivityÊôÐÔ£º

name£ºÓÃÀ´Ö¸¶¨ÊÜ´ËloggerÔ¼ÊøµÄijһ¸ö°ü»òÕß¾ßÌåµÄijһ¸öÀà

level£ºÓÃÀ´ÉèÖôòÓ¡¼¶±ð£¬Îå¸ö³£ÓôòÓ¡¼¶±ð´ÓµÍÖÁ¸ßÒÀ´ÎΪTRACE¡¢DEBUG¡¢INFO¡¢WARN¡¢ERROR£¬Èç¹ûδÉèÖô˼¶±ð£¬ÄÇôµ±Ç°logger»á¼Ì³ÐÉϼ¶µÄ¼¶±ð

additivity£ºÊÇ·ñÏòÉϼ¶logger´«µÝ´òÓ¡ÐÅÏ¢£¬Ä¬ÈÏΪtrue

<root>Ò²ÊÇ<logger>ÔªËØ£¬µ«ÊÇËüÊǸùlogger£¬Ö»ÓÐÒ»¸ölevelÊôÐÔ£¬ÒòΪËüµÄname¾ÍÊÇROOT£¬¹ØÓÚÕâ¸öµØ·½£¬ÓÐÅóÓÑ΢ÐÅÉÏÎÊÆð£¬Ô´ÂëÔÚLoggerContextÖУº

public LoggerContext() {
super();
this.loggerCache = new ConcurrentHashMap<String, Logger>();

this.loggerContextRemoteView = new LoggerContextVO(this);
this.root = new Logger(Logger.ROOT_LOGGER_NAME, null, this);
this.root.setLevel(Level.DEBUG);
loggerCache.put(Logger.ROOT_LOGGER_NAME, root);
initEvaluatorMap();
size = 1;
this.frameworkPackages = new ArrayList<String>();
}

LoggerµÄ¹¹Ô캯ÊýΪ£º

Logger(String name, Logger parent, LoggerContext loggerContext) {
this.name = name;
this.parent = parent;
this.loggerContext = loggerContext;
}

¿´µ½µÚÒ»¸ö²ÎÊý¾ÍÊÇRootµÄname£¬¶øÕâ¸öLogger.ROOT_LOGGER_NAMEµÄ¶¨ÒåΪfinal public String ROOT_LOGGER_NAME = ¡°ROOT¡±£¬ÓÉ´Ë¿ÉÒÔ¿´³ö<root>½ÚµãµÄname¾ÍÊÇ¡±ROOT¡±¡£

½Ó×Åдһ¶Î´úÂëÀ´²âÊÔһϣº

public class Slf4jTest {

@Test
public void testSlf4j() {
Logger logger = LoggerFactory.getLogger(Object.class);
logger.trace("=====trace=====");
logger.debug("=====debug=====");
logger.info("=====info=====");
logger.warn("=====warn=====");
logger.error("=====error=====");
}

}

logback.xmlµÄÅäÖÃΪ£º

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</layout>
</appender>

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

</configuration>

root½«´òÓ¡¼¶±ðÉèÖÃΪ¡±info¡±¼¶±ð£¬<appender>ÔÝʱ²»¹Ü£¬¿ØÖÆÌ¨µÄÊä³öΪ£º

2018-03-26 22:57:48.779 [main] INFO java.lang.Object - =====info=====
2018-03-26 22:57:48.782 [main] WARN java.lang.Object - =====warn=====
2018-03-26 22:57:48.782 [main] ERROR java.lang.Object - =====error=====

logback.xmlµÄÒâ˼ÊÇ£¬µ±Test·½·¨ÔËÐÐʱ£¬root½Úµã½«ÈÕÖ¾¼¶±ð´óÓÚµÈÓÚinfoµÄ½»¸øÒѾ­ÅäÖúõÄÃûΪ¡±STDOUT¡±µÄ<appender>½øÐд¦Àí£¬¡±STDOUT¡±½«ÐÅÏ¢´òÓ¡µ½¿ØÖÆÌ¨ÉÏ¡£

½Ó×ÅÀí½âÒ»ÏÂ<logger>½ÚµãµÄ×÷Óã¬logback.xmlÐÞ¸Äһϣ¬¼ÓÈëÒ»¸öÖ»ÓÐnameÊôÐÔµÄ<logger>£º

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">

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

<logger name="java" />

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

</configuration>

×¢ÒâÕâ¸öname±íʾµÄÊÇLoggerFactory.getLogger(XXX.class)£¬XXXµÄ°ü·¾¶£¬°ü·¾¶Ô½ÉÙÔ½ÊǸ¸¼¶£¬ÎÒÃDzâÊÔ´úÂëÀïÃæÊÇObject.class£¬¼´name=¡±java¡±ÊÇname=¡±java.lang¡±µÄ¸¸¼¶£¬rootÊÇËùÓÐ<logger>µÄ¸¸¼¶¡£¿´Ò»ÏÂÊä³öΪ£º

2018-03-27 23:02:02.963 [main] DEBUG java.lang.Object - =====debug=====
2018-03-27 23:02:02.965 [main] INFO java.lang.Object - =====info=====
2018-03-27 23:02:02.966 [main] WARN java.lang.Object - =====warn=====
2018-03-27 23:02:02.966 [main] ERROR java.lang.Object - =====error=====

³öÏÖÕâÑùµÄ½á¹ûÊÇÒòΪ£º

<logger>ÖÐûÓÐÅäÖÃlevel£¬¼´¼Ì³Ð¸¸¼¶µÄlevel£¬<logger>µÄ¸¸¼¶Îª<root>£¬ÄÇôlevel=debug

ûÓÐÅäÖÃadditivity£¬ÄÇôadditivity=true£¬±íʾ´Ë<logger>µÄ´òÓ¡ÐÅÏ¢Ïò¸¸¼¶<root>´«µÝ

ûÓÐÅäÖÃ<appender-ref>£¬±íʾ´Ë<logger>²»»á´òÓ¡³öÈκÎÐÅÏ¢

ÓÉ´Ë¿ÉÖª£¬<logger>µÄ´òÓ¡ÐÅÏ¢Ïò<root>´«µÝ£¬<root>ʹÓá±STDOUT¡±Õâ¸ö<appender>´òÓ¡³öËùÓдóÓÚµÈÓÚdebug¼¶±ðµÄÈÕÖ¾¡£¾ÙÒ»·´Èý£¬ÎÒÃǽ«<logger>µÄadditivityÅäÖÃΪfalse£¬ÄÇô¿ØÖÆÌ¨Ó¦¸Ã²»»á´òÓ¡³öÈκÎÈÕÖ¾£¬ÒòΪ<logger>µÄ´òÓ¡ÐÅÏ¢²»»áÏò¸¸¼¶<root>´«µÝÇÒ<logger>ûÓÐÅäÖÃÈκÎ<appender>£¬´ó¼Ò¿ÉÒÔ×Ô¼ºÊÔÑéһϡ£

½Ó×Å£¬ÎÒÃÇÔÙÅäÖÃÒ»¸ö<logger>£º

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">

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

<logger name="java" additivity="false" />
<logger name="java.lang" level="warn">
<appender-ref ref="STDOUT" />
</logger>

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

</configuration>

Èç¹û¶Á¶®ÁËÉÏÃæµÄÀý×Ó£¬ÄÇôÕâ¸öÀý×ÓÓ¦µ±ºÜºÃÀí½â£º

LoggerFactory.getLogger(Object.class)£¬Ê×ÏÈÕÒµ½name=¡±java.lang¡±Õâ¸ö<logger>£¬½«ÈÕÖ¾¼¶±ð´óÓÚµÈÓÚwarnµÄʹÓá±STDOUT¡±Õâ¸ö<appender>´òÓ¡³öÀ´

name=¡±java.lang¡±Õâ¸ö<logger>ûÓÐÅäÖÃadditivity£¬ÄÇôadditivity=true£¬´òÓ¡ÐÅÏ¢ÏòÉÏ´«µÝ£¬´«µÝ¸ø¸¸¼¶name=¡±java¡±Õâ¸ö<logger>

name=¡±java¡±Õâ¸ö<logger>µÄadditivity=falseÇÒ²»¹ØÁªÈκÎ<appender>£¬ÄÇôname=¡±java¡±Õâ¸ö<appender>²»»á´òÓ¡ÈκÎÐÅÏ¢

ÓÉ´Ë·ÖÎö£¬µÃ³ö×îÖյĴòÓ¡½á¹ûΪ£º

2018-03-27 23:12:16.147 [main] WARN java.lang.Object - =====warn=====
2018-03-27 23:12:16.150 [main] ERROR java.lang.Object - =====error=====

¾ÙÒ»·´Èý£¬ÉÏÃæµÄname=¡±java¡±Õâ¸ö<appender>¿ÉÒÔ°ÑadditivityÉèÖÃΪtrueÊÔÊÔ¿´ÊÇʲô½á¹û£¬Èç¹û¶ÔÇ°ÃæµÄ·ÖÎöÀí½âµÄÅóÓÑÓ¦¸ÃºÜÈÝÒ×Ïëµ½£¬ÓÐÁ½²¿·ÖÈÕÖ¾Êä³ö£¬Ò»²¿·ÖÊÇÈÕÖ¾¼¶±ð´óÓÚµÈÓÚwarnµÄ¡¢Ò»²¿·ÖÊÇÈÕÖ¾¼¶±ð´óÓÚµÈÓÚdebugµÄ¡£

<appender>

½Ó×Å¿´Ò»ÏÂ<appender>£¬<appender>ÊÇ<configuration>µÄ×ӽڵ㣬ÊǸºÔðдÈÕÖ¾µÄ×é¼þ¡£<appender>ÓÐÁ½¸ö±ØÒªÊôÐÔnameºÍclass£º

nameÖ¸¶¨<appender>µÄÃû³Æ

classÖ¸¶¨<appender>µÄÈ«ÏÞ¶¨Ãû

<appender>Óкü¸ÖÖ£¬ÉÏÃæÎÒÃÇÑÝʾ¹ýµÄÊÇConsoleAppender£¬ConsoleAppenderµÄ×÷ÓÃÊǽ«ÈÕÖ¾Êä³öµ½¿ØÖÆÌ¨£¬ÅäÖÃʾÀýΪ£º

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

ÆäÖУ¬encoder±íʾ¶Ô²ÎÊý½øÐиñʽ»¯¡£ÎÒÃǺÍÉÏÒ»²¿·ÖµÄÀý×Ó¶Ô±Èһϣ¬·¢ÏÖÕâÀïÊÇÓÐËùÇø±ðµÄ£¬ÉÏÃæÊ¹ÓÃÁË<layout>¶¨Òå<pattern>£¬ÕâÀïʹÓÃÁË<encoder>¶¨Òå<pattern>£¬¼òµ¥ËµÒ»Ï£º

<encoder>ÊÇ0.9.19°æ±¾Ö®ºóÒý½øµÄ£¬ÒÔǰµÄ°æ±¾Ê¹ÓÃ<layout>£¬logback¼«Á¦ÍƼöµÄÊÇʹÓÃ<encoder>¶ø²»ÊÇ<layout>

×î³£ÓõÄFileAppenderºÍËüµÄ×ÓÀàµÄÆÚÍûÊÇʹÓÃ<encoder>¶ø²»ÔÙʹÓÃ<layout>

¹ØÓÚ<encoder>ÖеĸñʽÏÂÒ»²¿·ÖÔÙ˵¡£½Ó×ÅÎÒÃÇ¿´Ò»ÏÂFileAppender£¬FileAppenderµÄ×÷ÓÃÊǽ«ÈÕ־дµ½ÎļþÖУ¬ÅäÖÃʾÀýΪ£º

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>D:/123.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

ËüµÄ¼¸¸ö½ÚµãΪ£º

<file>±íʾдÈëµÄÎļþÃû£¬¿ÉÒÔʹÏà¶ÔĿ¼Ҳ¿ÉÒÔÊǾø¶ÔĿ¼£¬Èç¹ûÉϼ¶Ä¿Â¼²»´æÔÚÔò×Ô¶¯´´½¨

<appender>Èç¹ûΪtrue±íʾÈÕÖ¾±»×·¼Óµ½Îļþ½á⣬Èç¹ûÊÇfalse±íʾÇå¿ÕÎļþ

<encoder>±íʾÊä³ö¸ñʽ£¬ºóÃæËµ

<prudent>Èç¹ûΪtrue±íʾÈÕÖ¾»á±»°²È«µØÐ´ÈëÎļþ£¬¼´Ê¹ÆäËûµÄFileAppenderÒ²ÔÚÏò´ËÎļþ×öдÈë²Ù×÷£¬Ð§Âʵͣ¬Ä¬ÈÏΪfalse

½Ó×ÅÀ´¿´Ò»ÏÂRollingFileAppender£¬RollingFileAppenderµÄ×÷ÓÃÊǹö¶¯¼Ç¼Îļþ£¬ÏȽ«ÈÕÖ¾¼Ç¼µ½Ö¸¶¨Îļþ£¬µ±·ûºÏij¸öÌõ¼þʱÔÙ½«ÈÕÖ¾¼Ç¼µ½ÆäËûÎļþ£¬RollingFileAppenderÅäÖñȽÏÁé»î£¬Òò´ËʹÓõøü¶à£¬Ê¾ÀýΪ£º

<appender name="ROLLING-FILE-1" class="ch.qos.logback.core.rolling.RollingFile

Appender">
<rollingPolicyclass="ch.qos.logback.core.

rolling.TimeBasedRollingPolicy">
<fileNamePattern>rolling-file-%d{yyyy-MM-dd}

.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35}

- %msg%n</pattern>
</encoder>
</appender>

ÕâÖÖÊǽö½öÖ¸¶¨ÁË<rollingPolicy>µÄд·¨£¬<rollingPolicy>µÄ×÷ÓÃÊǵ±·¢Éú¹ö¶¯Ê±£¬¶¨ÒåRollingFileAppenderµÄÐÐΪ£¬ÆäÖÐÉÏÃæµÄ TimeBasedRollingPolicy ÊÇ×î³£ÓõĹö¶¯²ßÂÔ£¬Ëü¸ù¾Ýʱ¼äÖ¸¶¨¹ö¶¯²ßÂÔ£¬¼È¸ºÔð¹ö¶¯Ò²¸ºÔð´¥·¢¹ö¶¯£¬ÓÐÒÔϽڵ㣺

<fileNamePattern>£¬±ØÒª½Úµã£¬°üº¬ÎļþÃû¼°¡±%d¡±×ª»»·û£¬¡±%d¡±¿ÉÒÔ°üº¬Ò»¸öJava .text.SimpleDateFormat Ö¸¶¨µÄʱ¼ä¸ñʽ£¬Èç%d{yyyy-MM}£¬Èç¹ûÖ±½ÓʹÓÃ%dÄÇô¸ñʽΪyyyy-MM-dd¡£ RollingFileAppender µÄfile×Ó½Úµã¿ÉÓпÉÎÞ£¬Í¨¹ýÉèÖÃfile¿ÉÒÔΪ»î¶¯ÎļþºÍ¹éµµÎļþÖ¸¶¨²»Í¬µÄλÖÃ

<maxHistory>£¬¿ÉÑ¡½Úµã£¬¿ØÖƱ£ÁôµÄ¹éµµÎļþµÄ×î´óÊýÁ¿£¬Èç¹û³¬³öÊýÁ¿¾Íɾ³ý¾ÉÎļþ£¬¼ÙÉèÉèÖÃÿ¸öÔ¹ö¶¯ÇÒ<maxHistory>ÊÇ6£¬ÔòÖ»±£´æ×î½ü6¸öÔµÄÎļþ

ÏòÆäËû»¹ÓÐSizeBasedTriggeringPolicy£¬ÓÃÓÚ°´ÕÕÎļþ´óС½øÐйö¶¯£¬¿ÉÒÔ×Ô¼º²éÔÄÒ»ÏÂ×ÊÁÏ¡£

Ò첽дÈÕÖ¾

ÈÕ־ͨ³£À´Ëµ¶¼ÒÔÎļþÐÎʽ¼Ç¼µ½´ÅÅÌ£¬ÀýÈçʹÓÃ<RollingFileAppender>£¬ÕâÑùµÄ»°Ò»´ÎдÈÕÖ¾¾Í»á·¢ÉúÒ»´Î´ÅÅÌIO£¬Õâ¶ÔÓÚÐÔÄÜÊÇÒ»ÖÖËðºÄ£¬Òò´Ë¸ü¶àµÄ£¬¶ÔÓÚÿ´ÎÇëÇ󱨴òµÄÈÕÖ¾£¨ÀýÈçÇëÇóÈÕÖ¾£¬¼Ç¼ÇëÇóAPI¡¢²ÎÊý¡¢ÇëÇóʱ¼ä£©£¬ÎÒÃÇ»á²ÉÈ¡Ò첽дÈÕÖ¾µÄ·½Ê½¶ø²»Èô˴ÎдÈÕÖ¾·¢Éú´ÅÅÌIO£¬×èÈûÏ̴߳ӶøÔì³É²»±ØÒªµÄÐÔÄÜËðºÄ¡££¨²»ÒªÐ¡¿´Õâ¸öµã£¬¿ÉÒÔÍøÉϲéһϷþÎñ¶ËÐÔÄÜÓÅ»¯µÄÎÄÕ£¬Ö»ÊÇÒòΪ½«ÈÕÖ¾¸ÄΪÒ첽д£¬Õû¸öQPS¾ÍÓÐÁË´ó·ùµÄÌá¸ß£©¡£

½Ó×ÅÎÒÃÇ¿´ÏÂÈçºÎʹÓÃlogback½øÐÐÒ첽дÈÕÖ¾ÅäÖãº

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]

%-5level %logger - %msg%n</pattern>
</encoder>
</appender>

<appender name="ROLLING-FILE-1" class="ch.qos.logback.core.rolling.RollingFile

Appender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRolling

Policy">
<fileNamePattern>D:/rolling-file-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %lo{35} - %msg%n</pattern>
</encoder>
</appender>

<!-- Òì²½Êä³ö -->
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<!-- ²»¶ªÊ§ÈÕÖ¾.ĬÈϵÄ,Èç¹û¶ÓÁеÄ80%ÒÑÂú,

Ôò»á¶ªÆúTRACT¡¢DEBUG¡¢INFO¼¶±ðµÄÈÕÖ¾ -->
<discardingThreshold>0</discardingThreshold>
<!-- ¸ü¸ÄĬÈϵĶÓÁеÄÉî¶È,¸ÃÖµ»áÓ°ÏìÐÔÄÜ.

ĬÈÏֵΪ256 -->
<queueSize>256</queueSize>
<!-- Ìí¼Ó¸½¼ÓµÄappender,×î¶àÖ»ÄÜÌí¼ÓÒ»¸ö -->
<appender-ref ref ="ROLLING-FILE-1"/>
</appender>

<logger name="java" additivity="false" />
<logger name="java.lang" level="DEBUG">
<appender-ref ref="ASYNC" />
</logger>

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

</configuration>

¼´£¬ÎÒÃÇÒýÈëÁËÒ»¸öAsyncAppender£¬ÏÈ˵һÏÂAsyncAppenderµÄÔ­Àí£¬ÔÙ˵һϼ¸¸ö²ÎÊý£º

µ±ÎÒÃÇÅäÖÃÁËAsyncAppender£¬ÏµÍ³Æô¶¯Ê±»á³õʼ»¯Ò»ÌõÃûΪ"AsyncAppender-Worker-ASYNC"µÄÏß³Ì

µ±Logging Event½øÈëAsyncAppenderºó£¬AsyncAppender»áµ÷ÓÃappender·½·¨£¬appender·½·¨ÖÐÔÙ½«eventÌîÈëBuffer£¨Ê¹ÓõÄBufferΪBlockingQueue£¬¾ßÌåʵÏÖΪArrayBlockingQueye£©Ç°£¬»áÏÈÅжϵ±Ç°BufferµÄÈÝÁ¿ÒÔ¼°¶ªÆúÈÕÖ¾ÌØÐÔÊÇ·ñ¿ªÆô£¬µ±Ïû·ÑÄÜÁ¦²»ÈçÉú²úÄÜÁ¦Ê±£¬AsyncAppender»á½«³¬³öBufferÈÝÁ¿µÄLogging EventµÄ¼¶±ð½øÐжªÆú£¬×÷ΪÏû·ÑËÙ¶ÈÒ»µ©¸ú²»ÉÏÉú²úËٶȵ¼ÖÂBufferÒç³ö´¦ÀíµÄÒ»ÖÖ·½Ê½¡£

ÉÏÃæµÄÏ̵߳Ä×÷Ó㬾ÍÊÇ´ÓBufferÖÐÈ¡³öEvent£¬½»¸ø¶ÔÓ¦µÄappender½øÐкóÃæµÄÈÕÖ¾ÍÆËÍ

´ÓÉÏÃæµÄÃèÊöÎÒÃÇ¿ÉÒÔ¿´³ö£¬AsyncAppender²¢²»´¦ÀíÈÕÖ¾£¬Ö»Êǽ«ÈÕÖ¾»º³åµ½Ò»¸öBlockingQueueÀïÃæÈ¥£¬²¢ÔÚÄÚ²¿´´½¨Ò»¸ö¹¤×÷Ï̴߳ӶÓÁÐÍ·²¿»ñÈ¡ÈÕÖ¾£¬Ö®ºó½«»ñÈ¡µÄÈÕ־ѭ»·¼Ç¼µ½¸½¼ÓµÄÆäËûappenderÉÏÈ¥£¬´Ó¶ø´ïµ½²»×èÈûÖ÷Ï̵߳ÄЧ¹û¡£Òò´ËAsyncAppender½ö½ö³äµ±µÄÊÇʼþת·¢Æ÷£¬±ØÐëÒýÓÃÁíÍâÒ»¸öappenderÀ´×öÊ¡£

´ÓÉÏÊöÔ­Àí£¬ÎÒÃǾÍÄܱȽÏÇåÎúµØÀí½â¼¸¸ö²ÎÊýµÄ×÷ÓÃÁË£º

discardingThreshold£¬¼ÙÈçµÈÓÚ20Ôò±íʾ£¬±íʾµ±»¹Ê£20%ÈÝÁ¿Ê±£¬½«¶ªÆúTRACE¡¢DEBUG¡¢INFO¼¶±ðµÄEvent£¬Ö»±£ÁôWARNÓëERROR¼¶±ðµÄEvent£¬ÎªÁ˱£ÁôËùÓеÄevents£¬¿ÉÒÔ½«Õâ¸öÖµÉèÖÃΪ0£¬Ä¬ÈÏֵΪqueueSize/5

queueSize±È½ÏºÃÀí½â£¬BlockingQueueµÄ×î´óÈÝÁ¿£¬Ä¬ÈÏΪ256

includeCallerData±íʾÊÇ·ñÌáÈ¡µ÷ÓÃÕßÊý¾Ý£¬Õâ¸öÖµ±»ÉèÖÃΪtrueµÄ´ú¼ÛÊÇÏ൱°º¹óµÄ£¬ÎªÁËÌáÉýÐÔÄÜ£¬Ä¬Èϵ±event±»¼ÓÈëBlockingQueueʱ£¬event¹ØÁªµÄµ÷ÓÃÕßÊý¾Ý²»»á±»ÌáÈ¡£¬Ö»ÓÐÏß³ÌÃûÕâЩ±È½Ï¼òµ¥µÄÊý¾Ý

appender-ref±íʾAsyncAppenderʹÓÃÄĸö¾ßÌåµÄ<appender>½øÐÐÈÕÖ¾Êä³ö

<encoder>

<encoder>½Úµã¸ºÔðÁ½¼þÊÂÇ飺

°ÑÈÕÖ¾ÐÅϢת»»Îª×Ö½ÚÊý×é

°Ñ×Ö½ÚÊý×éдµ½Êä³öÁ÷

ĿǰPatternLayoutEncoderÊÇΨһÓÐÓõÄÇÒĬÈϵÄencoder£¬ÓÐÒ»¸ö<pattern>½Úµã£¬¾ÍÏñÉÏÃæÑÝʾµÄ£¬ÓÃÀ´ÉèÖÃÈÕÖ¾µÄÊäÈë¸ñʽ£¬Ê¹Óá°%+ת»»·û¡±µÄ·½Ê½£¬Èç¹ûÒªÊä³ö¡±%¡±Ôò±ØÐëʹÓá±\%¡±¶Ô¡±%¡±½øÐÐתÒå¡£

<encoder>µÄһЩ¿ÉÓòÎÊýÓñí¸ñ±íʾһÏ£º

¿´µ½×îºóÒ»ÁÐÊÇ¡±ÊÇ·ñ±ÜÃâʹÓá±£¬ÕâÊÇÒòΪÕâЩÐÅÏ¢ÊÇÎÞ·¨Ö±½ÓÄõ½µÄ£¨±ÈÈçÇëÇóÐкš¢µ÷Ó÷½·¨Ãû£©£¬logback±ØÐëͨ¹ýÒ»Ð©ÌØÊâÊÖ¶ÎÈ¥»ñÈ¡ÕâЩÊý¾Ý£¨±ÈÈçÔÚÈÕÖ¾´òÓ¡³ö²úÉúÒ»¸ö¶ÑÕ»ÐÅÏ¢£©£¬ÕâÖÖ²Ù×÷»á±È½ÏÓ°ÏìЧÂÊ£¬Òò´Ë³ý·Ç±ØÒª£¬·ñÔò²»½¨Òé´òÓ¡ÕâЩÊý¾Ý¡£

Filter

×îºóÀ´¿´Ò»ÏÂ<filter>£¬<filter>ÊÇ<appender>µÄÒ»¸ö×ӽڵ㣬±íʾÔÚµ±Ç°¸øµ½µÄÈÕÖ¾¼¶±ðÏÂÔÙ½øÐÐÒ»´Î¹ýÂË£¬×î»ù±¾µÄFilterÓÐch.qos.logback.classic.filter.LevelFilterºÍch.qos.logback.classic.filter.ThresholdFilter£¬Ê×ÏÈ¿´Ò»ÏÂLevelFilter£º

<configuration scan="false" scanPeriod="60000" debug="false">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<logger name="java" additivity="false" />
<logger name="java.lang" level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>

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

</configuration>

¿´Ò»ÏÂÊä³ö£º

2018-03-31 22:22:58.843 [main] WARN java.lang.Object - =====warn=====

¿´µ½¾¡¹Ü<logger>ÅäÖõÄÊÇDEBUG£¬µ«ÊÇÊä³öµÄÖ»ÓÐwarn£¬ÒòΪÔÚ<filter>ÖÐ¶ÔÆ¥Åäµ½WARN¼¶±ðʱ×öÁËACCEPT£¨½ÓÊÜ£©£¬¶ÔδƥÅäµ½WARN¼¶±ðʱ×öÁËDENY£¨¾Ü¾ø£©£¬µ±È»Ö»ÄÜ´òÓ¡³öWARN¼¶±ðµÄÈÕÖ¾¡£

ÔÙ¿´Ò»ÏÂThresholdFilter£¬ÅäÖÃΪ£º

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">

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

<logger name="java" additivity="false" />
<logger name="java.lang" level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>

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

</configuration>

¿´Ò»ÏÂÊä³öΪ£º

2018-03-31 22:41:32.353 [main] INFO java.lang.Object - =====info=====
2018-03-31 22:41:32.358 [main] WARN java.lang.Object - =====warn=====
2018-03-31 22:41:32.359 [main] ERROR java.lang.Object - =====error=====

ÒòΪThresholdFilterµÄ²ßÂÔÊÇ£¬»á½«ÈÕÖ¾¼¶±ðСÓÚ<level>µÄÈ«²¿½øÐйýÂË£¬Òò´ËËäȻָ¶¨ÁËDEBUG¼¶±ð£¬µ«ÊÇÖ»ÓÐINFO¼°ÒÔÉϼ¶±ðµÄ²ÅÄܱ»´òÓ¡³öÀ´¡£

 

   
2473 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö