网站文章做内链,上海企业建站方案,网站推广工做计划范本,深圳市宣传片制作公司什么是logback
logback 继承自 log4j#xff0c;它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小#xff0c;包含了许多独特并且有用的特性。
logback.xml
首先直接上配置#xff0c;我在项目过程中发现一些同时遇到需要logback文件的时候就去…什么是logback
logback 继承自 log4j它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小包含了许多独特并且有用的特性。
logback.xml
首先直接上配置我在项目过程中发现一些同时遇到需要logback文件的时候就去其他项目copy一个改吧改吧名字就直接完事。完全不了解其中标签的含义以及需要单独将日志打入一个文件怎么使用都不清楚如果你需要一个logback可以把底下的copy走但是我建议看看后续的标签含义。
?xml version1.0 encodingUTF-8?
!-- 每隔20S扫描1次配置文件如果配置文件被修改自动加载 --
configuration scantrue scanPeriod20 seconds!-- Windows操作系统 --if conditionproperty(os.name).contains(Windows)thenproperty nameLOG_FILE_ROOT valueD://opt/applog/logs/appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/if!-- MAC操作系统 --if conditionproperty(os.name).toUpperCase().contains(MAC)thenproperty nameLOG_FILE_ROOT value.log/logs /!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/if!-- Linux操作系统 --if conditionproperty(os.name).contains(Linux)thenproperty nameLOG_FILE_ROOT value/opt/applog/-logs/!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/ifspringProfile namedevappender nameDEBUG classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-debug.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelDEBUG/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-debug-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory7/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/springProfile!-- 时间滚动输出 level为 INFO 日志 --appender nameINFO classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-info.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-info-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory20/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- 时间滚动输出 level为 WARN 日志 --appender nameWARN classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-warn.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelWARN/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-warn-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory7/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- 时间滚动输出 level为 ERROR 日志 --appender nameERROR classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-error.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-error-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory30/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- root Logger 分环境进行配置本地环境需要用的DEBUG --springProfile namedevroot levelDEBUGappender-ref refSTDOUT/appender-ref refDEBUG/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfilespringProfile nameproroot levelINFOappender-ref refSTDOUT/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfile/configurationroot标签
在 Logback 日志框架中root level 标签用于定义根日志级别。根日志级别是指所有日志记录器的默认级别如果没有为特定的日志记录器指定级别则会使用根日志级别。
根日志级别通过root 元素来表示其语法如下
root level级别!-- appender 配置 --
/root在这里level 属性用于指定根日志级别。根日志级别可以是以下之一TRACE、DEBUG、INFO、WARN、ERROR 或 OFF。级别由低到高TRACE 是最详细的级别而 OFF 表示禁用日志记录。
当一个日志事件发送到 Logback 时它将首先检查根日志级别。如果事件的级别高于或等于根日志级别那么该事件将被记录下来。如果事件的级别低于根日志级别那么它将被忽略。
因此通过设置 root level 标签您可以为整个应用程序指定默认的日志记录级别。您还可以在其他地方针对特定的日志记录器设置级别以覆盖根日志级别的默认设置。
appender-ref标签
appender-ref 标签用于将日志事件附加器appender与特定的日志记录器相关联。在 Logback 配置文件中可以使用 appender-ref 标签将一个或多个附加器与日志记录器关联起来。
appender-ref 元素的语法如下
appender-ref ref附加器名称 /在这里ref 属性用于指定要关联的附加器的名称。附加器名称应与配置文件中定义的附加器的名称匹配。
通过使用 appender-ref 标签您可以将一个或多个附加器例如文件附加器、控制台附加器等与日志记录器相关联。这意味着当日志事件到达该日志记录器时它将被传递给与之关联的附加器进行处理。这样可以根据需要将日志事件输出到不同的目标例如文件、控制台、远程服务器等。
以下是一个示例展示如何使用 appender-ref 标签将附加器与日志记录器关联
configuration!-- 定义附加器 --appender nameConsoleAppender classch.qos.logback.core.ConsoleAppender!-- 附加器配置 --/appender!-- 定义日志记录器 --logger namecom.example.MyClass levelDEBUG!-- 关联附加器 --appender-ref refConsoleAppender //logger
/configuration在上面的示例中ConsoleAppender 是一个控制台附加器它被定义在 appender 元素中。然后通过使用 appender-ref 标签将该附加器与名为 com.example.MyClass 的日志记录器关联起来。这意味着 com.example.MyClass 日志记录器的日志事件将被发送到 ConsoleAppender 进行处理。
通过适当配置 appender-ref 标签您可以将多个附加器关联到同一个日志记录器或者将同一个附加器关联到多个日志记录器以满足您的日志输出需求。
简单的说上述的示例就可以为我们输出日志到自定义的文件夹中。
输出日志到自定义文件
在开发的过程中难免会要在info日志和error日志中排查问题那么一个应用部署在测试环境或者uat环境的时候会产生大量的日志在日志文件中如果我们需要查询相关的日志记录通常linux会使用grep来进行搜索来满足需求。如果你的功能会被大量调用并且需要详细记录前后流转的参数又或者在测试阶段需要把用户所有的权限和角色在日志文件中打印观察。此时你可能需要把你这部分的功能开发日志打印到一个单独的日志文件中。
!-- root Logger 分环境进行配置本地环境需要用的DEBUG --springProfile namedevroot levelDEBUGappender-ref refSTDOUT/appender-ref refDEBUG/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfilespringProfile nameproroot levelINFOappender-ref refSTDOUT/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfile根据springProfile标签我们可以分环境配置dev环境的root级别改为DEBUG级别pro环境使用INFO级别。所以如果你需要观察用户权限问题打的日志可以使用log.debug()来记录在debug的日志文件中。
那么如果想要新建一个日志文件(非info、error、warn、debug)的日志例如支付相关的日志都放入paylog文件中。不管是DEBUG INFO WARN ERROR都直接放一起那么我们需要自定义一个附加器appender和一个日志记录器logger。
附加器定义如下
appender namepay classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/qhyu.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelDEBUG/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelWARN/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/qhyu-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory20/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender
在 Logback 的过滤器配置中onMatch 和 onMismatch 标签用于指定过滤器匹配和不匹配时的行为。它们需要配套使用。 onMatch该标签定义了当日志事件与过滤器匹配时的操作。它有以下参数 ACCEPT表示接受通过匹配的日志事件将其传递给后续的附加器或日志记录器进行处理。 NEUTRAL表示中立不对匹配的日志事件进行特殊处理继续按照日志处理流程进行传递。 DENY表示拒绝拦截匹配的日志事件不将其传递给后续的附加器或日志记录器。 onMismatch该标签定义了当日志事件与过滤器不匹配时的操作。它有以下参数 ACCEPT表示接受通过不匹配的日志事件将其传递给后续的附加器或日志记录器进行处理。 NEUTRAL表示中立不对不匹配的日志事件进行特殊处理继续按照日志处理流程进行传递。 DENY表示拒绝拦截不匹配的日志事件不将其传递给后续的附加器或日志记录器。
通常情况下应该将 onMatch 和 onMismatch 标签配对使用以明确指定匹配和不匹配时的操作。例如可以将匹配时的操作设置为 ACCEPT表示允许通过匹配的日志事件而将不匹配时的操作设置为 DENY表示拒绝不匹配的日志事件。
以下是一个示例配置
filter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch
/filter在上述示例中过滤器的配置指定了当日志事件的级别为 INFO 时执行匹配操作为 ACCEPT而当日志事件的级别不是 INFO 时执行不匹配操作为 DENY。这意味着只有级别为 INFO 的日志事件才会通过过滤器其他级别的日志事件将被拒绝。
因为我想把所有的日志都打到一个文件中不区分info error还是warn所以我将四个过滤器放在同一个附加器中如果你想为这个文件拆分的话可以配合日志记录器一起使用也就是接下来要说的内容。
日志记录器如下
logger namePAYLOGGER levelDEBUG additivityfalseappender-ref refpay//logger如果使用的是自定义name那么自己使用的时候需要定义Logger logger LoggerFactory.getLogger(“PAYLOGGER”);这样可以在任意的类中直接使用。
logger 标签用于配置特定包或类的日志记录器。它允许您为特定的包或类设置不同于根日志记录器的日志级别、附加器和其他属性。
logger 标签有以下常用的属性 name指定要配置的包或类的名称。可以使用包名或类的全限定名。例如com.swcares.eupsi.airplaneSale。 level设置该日志记录器的日志级别。可以是 TRACE、DEBUG、INFO、WARN 或 ERROR 等级别。例如INFO。 additivity指定是否继承父级日志记录器的附加器。如果设置为 true则该日志记录器将继承父级日志记录器的附加器如果设置为 false则该日志记录器将仅使用自己配置的附加器。默认值为 true。
除了上述常用属性外logger 标签还可以配置其他属性如 appender-ref 标签引用的附加器、filter 标签设置的过滤器等。这些属性可以根据您的需求进行配置和调整。
以下是一个示例 logger 标签的配置
logger namecom.qhyu.pay.modules.test levelINFO additivityfalseappender-ref refSOME_APPENDER/
/logger在上述示例中logger 标签配置了名为 com.qhyu.pay.modules.test 的日志记录器将日志级别设置为 INFO并指定了一个名为 SOME_APPENDER 的附加器。此外additivity 属性被设置为 false表示该日志记录器不会继承父级日志记录器的附加器。
这种配置就是可以在这个类中直接使用不需要定义Logger了。 通过使用 logger 标签您可以对特定的包或类进行精细化的日志配置以满足不同部分的日志记录需求。
完整xml
?xml version1.0 encodingUTF-8?
!-- 每隔20S扫描1次配置文件如果配置文件被修改自动加载 --
configuration scantrue scanPeriod20 seconds!-- Windows操作系统 --if conditionproperty(os.name).contains(Windows)thenproperty nameLOG_FILE_ROOT valueD://opt/applog/logs/appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/if!-- MAC操作系统 --if conditionproperty(os.name).toUpperCase().contains(MAC)thenproperty nameLOG_FILE_ROOT value.log/logs/!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/if!-- Linux操作系统 --if conditionproperty(os.name).contains(Linux)thenproperty nameLOG_FILE_ROOT value/opt/applog/-logs/!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/then/ifspringProfile namedevappender nameDEBUG classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-debug.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelDEBUG/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-debug-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory7/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender/springProfile!-- 时间滚动输出 level为 INFO 日志 --appender nameINFO classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-info.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-info-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory20/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- 时间滚动输出 level为 INFO 日志 --appender nameWARN classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-warn.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelWARN/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-warn-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory7/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- 时间滚动输出 level为 ERROR 日志 --appender nameERROR classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/web-error.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/web-error-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory30/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!-- 时间滚动输出 所有级别的日志到预计的文件中 --appender namepay classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE_ROOT}/pay.log/filefilter classch.qos.logback.classic.filter.LevelFilterlevelDEBUG/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelWARN/levelonMatchACCEPT/onMatchonMismatchNEUTRAL/onMismatch/filterfilter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filterrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE_ROOT}/pay-%d{yyyy-MM-dd}.%i.log.gz/fileNamePatternmaxFileSize100MB/maxFileSizemaxHistory20/maxHistorycleanHistoryOnStarttrue/cleanHistoryOnStart/rollingPolicyencoderpattern%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n/pattern/encoder/appender!--logger namecom.qhyu.pay.modules.test levelDEBUG additivityfalseappender-ref refpay//logger--logger namePAYLOGGER levelDEBUG additivityfalseappender-ref refpay//logger!-- root Logger 分环境进行配置本地环境需要用的DEBUG --springProfile namedevroot levelDEBUGappender-ref refSTDOUT/appender-ref refDEBUG/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfilespringProfile nameproroot levelINFOappender-ref refSTDOUT/appender-ref refINFO/appender-ref refWARN/appender-ref refERROR//root/springProfile
/configuration