log4j:将特定类的输出记录到特定的附加程序

发布于 2024-08-31 13:20:17 字数 134 浏览 4 评论 0原文

我使用 log4j 并希望将某些记录器的输出路由到特定文件。

我已经有多个附加程序了。现在,为了使调试更容易,我想告诉 log4j 由特定类(例如 foo.bar.Baz)生成的输出应该写入特定的日志文件。

这可以做到吗?

I use log4j and would like to route the output of certain Loggers to specific files.

I already have multiple appenders in place. Now, to make debugging easier, I want to tell log4j that the output generated by a specific class (e.g. foo.bar.Baz) should be written to a specific log file.

Can this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你不是我要的菜∠ 2024-09-07 13:20:17

一个例子:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

An example:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n
千笙结 2024-09-07 13:20:17

这是关于 XML 配置的答案,请注意,如果您没有为文件附加程序提供 ConversionPattern ,它将创建 0 字节文件并且不写入任何内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

Here's an answer regarding the XML configuration, note that if you don't give the file appender a ConversionPattern it will create 0 byte file and not write anything:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>
我家小可爱 2024-09-07 13:20:17

下面是一个将详细信息记录到单独文件中的示例,每个月推出文件并删除超过 180 天的日志:

#property settings
property.LOG_DIR = /opt/logs/app_name/

#Console appenders
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n

#root loggers
rootLogger.level = INFO
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.files.ref = Rolling

# Rolling file appender
appender.rolling.type = RollingFile
appender.rolling.name = Rolling
appender.rolling.fileName= ${LOG_DIR}/application.log
appender.rolling.filePattern= ${logFile}.%i
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.policies.size.size=50MB
appender.rolling.strategy.max=20

#custom logging for audit-viewer
logger.aduit.name = auditlogger
logger.aduit.level = info
logger.aduit.appenderRefs = auditRef
logger.aduit.appenderRef.auditRef.ref = AuditAppender
logger.aduit.additivity = false

# Logging audit details to dedicated file
appender.aduitfile.type = RollingFile
appender.aduitfile.fileName = ${AUDIT_FILE}
appender.aduitfile.filePattern= ${LOG_DIR}/audit.%d{yyyy-MM}.log
appender.aduitfile.name = AuditAppender
appender.aduitfile.layout.type = PatternLayout
appender.aduitfile.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n
appender.aduitfile.policies.type = Policies
appender.aduitfile.policies.time.type =TimeBasedTriggeringPolicy
appender.aduitfile.strategy.type = DefaultRolloverStrategy
#Rollout files based on month
appender.aduitfile.policies.time.interval=1
appender.aduitfile.policies.time.modulate= true
appender.aduitfile.ImmediateFlush=true
appender.aduitfile.append=true
appender.aduitfile.strategy.action.type = Delete
appender.aduitfile.strategy.action.basepath = ${LOG_DIR}
appender.aduitfile.strategy.action.maxdepth = 1
appender.aduitfile.strategy.action.PathConditions.type = IfFileName
#This below field uses relative path from basepath
appender.aduitfile.strategy.action.PathConditions.glob = audit.*.log
appender.aduitfile.strategy.action.condition.type = IfLastModified
appender.aduitfile.strategy.action.condition.age = P180D


# Settings to quiet third party or custom logs that are too verbose
loggers = mongodb, aduit

logger.mongodb.name=org.mongodb.driver.cluster
logger.mongodb.level=ERROR

如果您希望将某个类的日志记录到单独的文件中,例如 auditlogger ,请使用它在一个类中如下:

  private val logger = LogManager.getLogger("auditlogger") //dont change this appender ref
  logger.info("Find me inside 'audit.log' file")

Here is an example for logging details into separate files, rollout file for every month and delete logs older than 180 days:

#property settings
property.LOG_DIR = /opt/logs/app_name/

#Console appenders
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n

#root loggers
rootLogger.level = INFO
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.files.ref = Rolling

# Rolling file appender
appender.rolling.type = RollingFile
appender.rolling.name = Rolling
appender.rolling.fileName= ${LOG_DIR}/application.log
appender.rolling.filePattern= ${logFile}.%i
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.policies.size.size=50MB
appender.rolling.strategy.max=20

#custom logging for audit-viewer
logger.aduit.name = auditlogger
logger.aduit.level = info
logger.aduit.appenderRefs = auditRef
logger.aduit.appenderRef.auditRef.ref = AuditAppender
logger.aduit.additivity = false

# Logging audit details to dedicated file
appender.aduitfile.type = RollingFile
appender.aduitfile.fileName = ${AUDIT_FILE}
appender.aduitfile.filePattern= ${LOG_DIR}/audit.%d{yyyy-MM}.log
appender.aduitfile.name = AuditAppender
appender.aduitfile.layout.type = PatternLayout
appender.aduitfile.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %p %c{1}: %m%n
appender.aduitfile.policies.type = Policies
appender.aduitfile.policies.time.type =TimeBasedTriggeringPolicy
appender.aduitfile.strategy.type = DefaultRolloverStrategy
#Rollout files based on month
appender.aduitfile.policies.time.interval=1
appender.aduitfile.policies.time.modulate= true
appender.aduitfile.ImmediateFlush=true
appender.aduitfile.append=true
appender.aduitfile.strategy.action.type = Delete
appender.aduitfile.strategy.action.basepath = ${LOG_DIR}
appender.aduitfile.strategy.action.maxdepth = 1
appender.aduitfile.strategy.action.PathConditions.type = IfFileName
#This below field uses relative path from basepath
appender.aduitfile.strategy.action.PathConditions.glob = audit.*.log
appender.aduitfile.strategy.action.condition.type = IfLastModified
appender.aduitfile.strategy.action.condition.age = P180D


# Settings to quiet third party or custom logs that are too verbose
loggers = mongodb, aduit

logger.mongodb.name=org.mongodb.driver.cluster
logger.mongodb.level=ERROR

Here if you wish to have logs from some class into separate file, like auditlogger then use it inside a class as follows:

  private val logger = LogManager.getLogger("auditlogger") //dont change this appender ref
  logger.info("Find me inside 'audit.log' file")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文