标签: appender

LOG4J2 - 如何以编程方式创建File appender?

我需要以编程方式设置File appender.

我想在log4j2.xml上设置我的appenders 但是我想在运行时只编程(编程)到其中一个appender.

<Configuration status="WARN">
<Appenders>
    <File name="File_1" fileName="c:/FILE_1.log" >
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
    <File name="File_2" fileName="c:/FILE_2.log" >
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
    <File name="File_3" fileName="c:/FILE_3.log" >
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>
<Loggers>
    <Root level="debug">
        <AppenderRef ref="File_1"/>
        <AppenderRef ref="File_2"/>
        <AppenderRef ref="File_3"/>
    </Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)

例:

     if(condition.equals("A")){
             //write log on File_1
         }else if(condition.equals("B")){
              //write log on File_2
         }else {
              //write log on File_3
         }
Run Code Online (Sandbox Code Playgroud)

查看Internet中的各种教程,他们解释了如何在运行时以编程方式添加appender; 有没有办法在运行时选择只有一个在xml配置文件中定义的appender?

第一个解决方案:

我试图通过以下方式解决问题,但我对我的解决方案不满意,因为log4j2.xml中定义的文件没有以编程方式删除 …

java logging log4j appender log4j2

6
推荐指数
1
解决办法
7132
查看次数

Log4j2的FailoverAppender错误:appender故障转移没有与元素故障转移匹配的参数

当我使用log4j 2.1编译我的spring 3.2.9 web应用程序时,控制台中会出现此错误:

2015-02-02 12:08:25,213 ERROR appender Failover has no parameter that matches element Failovers
Run Code Online (Sandbox Code Playgroud)

我的理解是"故障转移"元素中不存在元素"故障转移",对吧?为什么会这样?我没有看到什么错,因为我有与log4j2手册相同的配置.

我在log4j2.xml中有这个配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="vcr-log4j2-config" status="debug">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>[%d{ISO8601}] %c [%C{1}] - %p: %m%n</Pattern>
            </PatternLayout>
        </Console>

        <Syslog name="SYS_LOG" host="test_server.com" port="514" 
                protocol="UDP" facility="LOCAL7">
        </Syslog>

        <RollingFile name="backupApp"
            fileName="C:/backup.log"
            filePattern="C:/backup-%d{yyyy-MM-dd_HH-mm}.log.gz">
            <PatternLayout>
                <Pattern>[%d{ISO8601}] [%c] - %p: %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
        </RollingFile>

        <Failover name="FAILOVER" primary="SYS_LOG">
            <Failovers>
                <AppenderRef ref="backupApp"/>
            </Failovers>
        </Failover>     
    </Appenders>

    <Loggers>
        <Logger name="com.test.util.CustomLogger" level="info" additivity="false">
            <AppenderRef ref="SYS_LOG" /> …
Run Code Online (Sandbox Code Playgroud)

java logging failover appender log4j2

6
推荐指数
1
解决办法
1万
查看次数

两个 log4j fileappenders 可以写入同一个文件吗?

暂时忘记您为什么要这样做的问题 - 如果出于某种原因,两个 FileAppender 配置了相同的文件 - 这个设置会起作用吗?

log4j appender fileappender

5
推荐指数
1
解决办法
6221
查看次数

log4net:加载自定义appender时出错

我扩展了AppenderSkeleton以创建一个名为HTTPAppender的自定义appender,但是在xml文件中引用了它.Log4Net显然无法找到我的自定义appender.有没有办法从xml文件引用它指向我的项目,或者我是否必须将自定义appender的源代码添加到log4net中,以便将其打包在log4net.dll中?

调试时,我在立即窗口中收到以下错误:

log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [HTTPAppender] of type [HTTPAppender.HTTPAppender,HTTPAppender]. Reported error follows.
System.IO.FileNotFoundException: Could not load file or assembly 'HTTPAppender' or one of its dependencies. The system cannot find the file specified.
File name: 'HTTPAppender'
   at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
...etc

这是xml文件的log4net部分:

<log4net> <appender name="HTTPAppender" type="HTTPAppender.HTTPAppender,HTTPAppender"> <evaluator type="log4net.Core.LevelEvaluator,log4net"> <threshold value="WARN"/> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="#%level - %message" /> …

log4net appender

5
推荐指数
2
解决办法
1万
查看次数

将日志输出发送到grails 1.3.2中的不同文件

我想在特定的appender中输出我的包或类的日志输出.但是所有内容都打印到root-logger.

这是我的配置:

log4j = {
    appenders {
        console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
        file name:'grailslog', file:'grails.log', threshold:org.apache.log4j.Level.DEBUG
        file name:'mylog', file:'mylog.log', threshold:org.apache.log4j.Level.DEBUG
    }

    error  'org.codehaus.groovy.grails.web.servlet',  //  controllers
           'org.codehaus.groovy.grails.web.pages', //  GSP
           'org.codehaus.groovy.grails.web.sitemesh', //  layouts
           'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
           'org.codehaus.groovy.grails.web.mapping', // URL mapping
           'org.codehaus.groovy.grails.commons', // core / classloading
           'org.codehaus.groovy.grails.plugins', // plugins
           'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
           'org.springframework',
           'org.hibernate',
           'net.sf.ehcache.hibernate'

    warn   'org.mortbay.log'

    debug  'grails.app'

    debug  mylog: 'my.package', additivity: true

    root {
      error 'grailslog'
      additivity = true
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这种语法:

log4j = {
    appender.stdout = "org.apache.log4j.ConsoleAppender"
    appender.'stdout.layout'="org.apache.log4j.PatternLayout" …
Run Code Online (Sandbox Code Playgroud)

grails logging log4j appender

5
推荐指数
1
解决办法
2543
查看次数

如何创建与jTextPane连接的Log4j 2 appender?

我正在尝试Log4j 2登录JTextPane.它应该像Netbeans IDE控制台中的STDERR或STDOUT(包括文本样式 - 颜色).

我知道我需要创建一个appender并连接它JTextPane,但我不知道它是如何使用的Log4j 2.

你有什么建议吗?

我感谢你的帮助,marty

jtextpane appender log4j2

5
推荐指数
1
解决办法
921
查看次数

在Logback中将Appender分组?

我有两个appender.其中一个是DB appender,另一个是SMTPAppender.当我使用特殊标记记录字符串时,我想使用我的自定义db appender和SMTPAppender.但是我不希望每隔两天定义两个appender:

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

我想要一个特殊的参考,就像那样:

<appender-group ref="CUSTOM_COMBO">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</appender-group>

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_COMBO"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

它应该都调用CUSTOM_DB和CUSTOM_EMAIL.我怎样才能在Logback with slf4j中做到这一点?

java logging logback slf4j appender

5
推荐指数
1
解决办法
624
查看次数

自定义logback appender抛出

因为我必须登录自定义(单个)数据库表,所以我编写了一个自定义logback appender来扩展logback DBAppender.

我有一些单元测试验证appender工作正常,但是很快,因为我想在我的webapplication中配置appender,我得到了一个ch.qos.logback.core.util.IncompatibleClassException.我不知道为什么会这样.以前有人有这个例外吗?

版本:

logback-core    : 1.0.13
logback-classic : 1.0.13
slf4j-api       : 1.7.5
Run Code Online (Sandbox Code Playgroud)

logback.xml

<?xml version="1.0" encoding="utf-8"?>
<configuration scan="true" debug="true" scanPeriod="10 seconds">

    <appender name="db" class="com.custom.common.logging.slf4j.Slf4jDbAppender">
        <connectionSource class="ch.qos.logback.core.db.JNDIConnectionSource">
            <jndiLocation>jdbc/logging</jndiLocation>
        </connectionSource>
    </appender>

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

</configuration>
Run Code Online (Sandbox Code Playgroud)

例外:

2013-10-24 14:57:17 INFO    AppenderAction  About to instantiate appender of type [com.custom.common.logging.slf4j.LSlf4jDbAppender]
2013-10-24 14:57:17 ERROR   AppenderAction  Could not create an Appender of type [com.custom.common.logging.slf4j.LSlf4jDbAppender].
ch.qos.logback.core.util.IncompatibleClassException
    at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:62)
    at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:48)
    at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:35)
    at ch.qos.logback.core.joran.action.AppenderAction.begin(AppenderAction.java:54)
    at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:275)
    at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:147)
    at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:129) …
Run Code Online (Sandbox Code Playgroud)

logback appender

5
推荐指数
1
解决办法
6490
查看次数

SocketAppender 和 PatternLayout

我有一个将日志发送到日志服务器存储的记录器。这工作正常,但不使用模式布局。有或没有这不会改变任何事情。我相信记得在某处阅读socketappender使用的是自己的模式而不是其他人的模式。

<appender name="LOGSTASH" class="org.apache.log4j.net.SocketAppender"> 
        <param name="Port" value="5000"/>
        <param name="RemoteHost" value="192.168.81.131"/> 
        <param name="ReconnectionDelay" value="5000"/>
        <param name="LocationInfo" value="true" />
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n" />
      </layout>
</appender> 
Run Code Online (Sandbox Code Playgroud)

但是在这个文档(和其他一些)中使用这个。此文档中的示例:

<appender name="A1" class="org.apache.log4j.net.SocketAppender">
    <param name="RemoteHost" value="localhost"/>
    <param name="Port" value="5000"/>
    <param name="LocationInfo" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
    </layout>
    </appender>
Run Code Online (Sandbox Code Playgroud)

那么是不可能在socketappender 中使用个人模式还是我的错?

如果不可能,是否有其他附加程序用于使用自定义模式进行 tcp 日志记录?

logging log4j appender

5
推荐指数
1
解决办法
4247
查看次数

正确的方法来停止自定义logback异步appender

我使用亚马逊的Java SDK创建了Amazon SQS和SNS logback appender.基本的appender使用同步Java API,但我也通过扩展ch.qos.logback.classic.AsyncAppender类创建了两者的异步版本.

使用异步appender停止logback记录器上下文不会按预期工作.当上下文停止时,所有异步appender都会在退出之前尝试刷新剩余事件.问题源于ch.qos.logback.core.AsyncAppenderBase#stop方法,它会中断工作线程.当Amazon SDK仍在处理排队事件并产生结果时触发中断com.amazonaws.AbortedException.在我的测试中,AbortedException当SDK处理来自API的响应时发生了这样的事情,因此实际的消息经历了,但情况可能并非总是如此.

即使工作者仍应处理剩余的事件队列,是否打算使用logback中断工作线程?如果是这样,我怎样才能解决AbortedException由中断引起的问题?我可以覆盖整个停止方法并删除中断,但这需要复制粘贴大部分实现.

java logback appender aws-sdk

5
推荐指数
1
解决办法
1890
查看次数