log4j日志分模块打印,同时不打印到控制台上

   由于定时刷新程序的启用,导致catalina.out配置文件中打入大量日志,致使程序调试困难。无法正常查看日志。所以客户要求将性能流量配置日志迁移出catalina.out目录。修改log4j配置文件后,发现分文件中有了日志输出,但是,catalina.out文件中依然有性能流量日志输出。

原始配置方法如下:
log4j.logger.com.test.cao.snmpgather = INFO, snmpgather

log4j.appender.snmpgather=org.apache.log4j.DailyRollingFileAppender

log4j.appender.snmpgather.File=${catalina.home}/logs/performance/snmpgather_

log4j.appender.snmpgather.DatePattern= yyyy-MM- dd'.log'

log4j.appender.snmpgather.layout=org.apache.log4j.PatternLayout

log4j.appender.snmpgather.layout.ConversionPattern= %-d{yyyy -MM-dd HH:mm:ss,SSS} [%p] [%C.%M:%L] %m%n
后来发现了如下方法,则可将日志从catalina.out工作台日志文件中移出,

log4j.additivity


现配置文件如下:       
log4j.logger.com.test.cao.snmpgather = INFO, snmpgather

log4j.appender.snmpgather=org.apache.log4j.DailyRollingFileAppender

log4j.appender.snmpgather.File=${catalina.home}/logs/performance/snmpgather_

log4j.appender.snmpgather.DatePattern= yyyy-MM- dd'.log'

log4j.appender.snmpgather.layout=org.apache.log4j.PatternLayout

log4j.appender.snmpgather.layout.ConversionPattern= %-d{yyyy -MM-dd HH:mm:ss,SSS} [%p] [%C.%M:%L] %m%n
 
log4j.additivity.com.linkage.module.liposs.system.cao.snmpgather = false
 
下面是log4j.additivity解释:
log4j.additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。
具体说,默认情况下 子Logger 会继承 父Logger 的appender,也就是说 子Logger 会在 父Logger 的appender里输出。
若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。
          
由于父log为:       
log4j.rootCategory=, A1 , R

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.Threshold=INFO

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern= %-d{yyyy -MM-dd HH:mm:ss} [%c]-[%p] %m%n

log4j.appender.R.Threshold=INFO

log4j.appender.R.MaxFileSize=100KB

log4j.appender.R.MaxBackupIndex=10

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern= %p %t %c - %m%n
 
所以会打到工作台中。
将additivity设为false则只依赖与自身的配置。

 

转载于:https://my.oschina.net/u/1460955/blog/289540

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二次封装 loguru 的方式可以更方便地使用 loguru 模块,同时也可以根据自己的需求自定义日志的格式、级别等信息。 下面是一个示例,将 loguru 封装成一个名为 `MyLogger` 的类,用于输出日志信息: ```python from loguru import logger import sys class MyLogger: def __init__(self, log_path): # 配置日志文件处理器 logger.add(log_path, rotation="10 MB", retention="5 days", level="INFO", encoding="utf-8") # 配置控制台处理器 logger.add(sys.stdout, colorize=True, format="<level>{level} {message}</level>") def info(self, message): logger.info(message) def debug(self, message): logger.debug(message) def warning(self, message): logger.warning(message) def error(self, message): logger.error(message) def exception(self, message): logger.exception(message) ``` 以上代码定义了一个名为 `MyLogger` 的类,它封装了 loguru 模块,用于输出日志信息。在 `__init__()` 方法中,配置了两个处理器,一个用于输出日志文件,一个用于实时输出控制台。其中,`log_path` 参数指定了日志文件的路径,`rotation` 和 `retention` 参数用于配置日志文件的大小和保留时间,`level` 参数指定了日志级别,`encoding` 参数指定了日志文件的编码方式。`sys.stdout` 表示输出到标准输出流,`colorize=True` 表示控制台输出日志信息带有颜色,`format` 参数用于自定义日志信息的格式。 在类中定义了几个方法,别用于输出不同级别的日志信息。这些方法内部直接调用 loguru 的对应方法即可。 使用时,可以先创建一个 `MyLogger` 对象,然后调用其方法输出日志信息: ```python logger = MyLogger("app.log") logger.info("This is an info message") logger.debug("This is a debug message") logger.warning("This is a warning message") logger.error("This is an error message") ``` 这样,日志信息就会实时输出控制台上,并且同时写入到日志文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值