簡體   English   中英

log4j - 寫入文件名作為記錄器名稱

[英]log4j - write to file name as the logger name

我正在嘗試根據記錄器名稱將我的日志寫入不同的文件...

有可能嗎?

如何在目標文件名中使用記錄器名稱?

這是我使用的 XML 文件:

<Configuration status="info">
<Properties>
    <Property name="log-path" value="logs/"/>
    <Property name="file-name" value="server"/>
    <Property name="file-type" value=".log"/>
</Properties>
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
    </Console>
    <RollingFile name="File" fileName="${log-path}${file-name}${file-type}"
                 filePattern="${file-name}-%d{yyyy.MM.dd_HH.mm.ss}-%i.log">
        <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
        <SizeBasedTriggeringPolicy size="1 MB"/>
    </RollingFile>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="File"/>
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

我嘗試使用: <Property name="file-name" value="%logger"/>就像在 PatternLayout 和<Property name="file-name" value="%c{10}"/>中使用沒有secssus...

你不能用 RollingFileAppender 那樣做。 appender 接收由<Loggers>塊配置的日志事件,如果 log4j 向其發送具有不同 LoggerNames 的日志事件,它們將被附加到打開的任何文件中。 RollingFileAppender 一次寫入一個文件,並在配置的策略告訴它時滾動。

您可以通過設置多個針對不同 appender 的 Logger 來寫入不同的文件。 像這樣:

<Configuration status="info">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
        </Console>
        <RollingFile name="FileA"
                     filePattern="/tmp/A-%d{yyyy.MM.dd_HH.mm.ss}-%i.log">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
            <SizeBasedTriggeringPolicy size="1 MB"/>
        </RollingFile>
        <RollingFile name="FileB"
                     filePattern="/tmp/B-%d{yyyy.MM.dd_HH.mm.ss}-%i.log">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
            <SizeBasedTriggeringPolicy size="1 MB"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="org.example.App" level="info" additivity="false">
            <AppenderRef ref="FileA"/>
        </Logger>
        <Logger name="org.example.App2" level="info" additivity="false">
            <AppenderRef ref="FileB"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

要根據某種模式將每個事件路由到不同的 RollingFileAppender ,您可以使用RoutingAppender

RoutingAppender 評估 LogEvents,然后將它們路由到從屬 Appender。 目標 Appender 可以是之前配置的 appender,可以通過其名稱引用,也可以根據需要動態創建 Appender。 RoutingAppender 應該在它引用的任何 Appender 之后配置,以允許它正確關閉。

您還可以使用腳本配置 RoutingAppender:您可以在 appender 啟動以及為日志事件選擇路由時運行腳本。

以下是基於 LoggerName 進行路由的方法:

<Configuration status="info">
    <Properties>
        <Property name="log-path" value="logs/"/>
        <Property name="file-name" value="server"/>
        <Property name="file-type" value=".log"/>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
        </Console>
        <Routing name="Routing">
            <Routes pattern="$${event:Logger}">
                <Route>
                    <RollingFile name="Rolling-${event:Logger}" fileName="${log-path}${file-name}-${event:Logger}${file-type}"
                                 filePattern="${file-name}-%d{yyyy.MM.dd_HH.mm.ss}-%i-${event:Logger}.log">
                        <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
                        <SizeBasedTriggeringPolicy size="1 MB"/>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Routing"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

此外,出於興趣,如果您真的想要,您可以實現自己的 Appender ,它可以使用 LogEvent 執行您想要的任何操作。

這是一個非常艱難的開始 它是一個為每個 LoggerName 創建一個 RollingFileAppender 的 Appender。 它僅在您使用 SizeBasedTriggeringPolicy 時才有效。 您應該能夠像這樣將 class 放入您的項目中,並使用 XML 如下:

<Configuration status="info">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
        </Console>
        <FilePerLoggerNameAppender name="File"
                     filePattern="/tmp/log-%d{yyyy.MM.dd_HH.mm.ss}-%i-$LOGGER$.log">
            <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
            <SizeBasedTriggeringPolicy size="1 MB"/>
        </FilePerLoggerNameAppender>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="File"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

並查看用您的記錄器名稱替換的$LOGGER$創建的日志文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM