Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到log4j siftAppender输出日志_Java_Logging_Log4j_Sift_Sifting Appender - Fatal编程技术网

Java 找不到log4j siftAppender输出日志

Java 找不到log4j siftAppender输出日志,java,logging,log4j,sift,sifting-appender,Java,Logging,Log4j,Sift,Sifting Appender,我跟着这个 我有这段代码,但没有写日志文件 我错过了什么 这是我的: log4j.properties log4j.rootLogger=INFO, sift, osgi:VmLogAppender # Sift appender log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender log4j.appender.sift.key=session_id log4j.appender.sift.default=no_se

我跟着这个

我有这段代码,但没有写日志文件

我错过了什么

这是我的:

log4j.properties

    log4j.rootLogger=INFO, sift, osgi:VmLogAppender

# Sift appender
log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
log4j.appender.sift.key=session_id
log4j.appender.sift.default=no_session_id
log4j.appender.sift.appender=org.apache.log4j.FileAppender
log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n
log4j.appender.sift.appender.file=$\\{session_id\\}.log
log4j.appender.sift.appender.append=true
我希望看到两个输出日志文件:
MyGooApp.log
MyFooApp.log
。然而,我在任何地方都找不到它们

更新

我试过这个:

log4j.appender.sift.appender.file=./$\\{session_id\\}.log
现在我看到了输出文件:


我已经用logback完成了。我现在与你分享

SiftExample.java logback.xml MyFooApp.log

2016-05-09 01:35:57 - Alice says hello
2016-05-09 01:35:57 - Bob says hi

注:请不要忘记这样做
  • 包名
    chapters.appenders.sift
    作为
    添加到logback.xml中,似乎您正在使用相对路径作为文件名(
    log4j.appender.sift.appender.file=$\{session\u id\\\}.log

    如果将log4j的日志级别设置为debug,则应在生成的日志中看到如下语句:

    setFile called: "+fileName+"
    
    您可以通过定义log4j.configDebug变量来启用log4j内部日志记录。所有log4j内部调试调用都转到System.out,其中as内部错误消息被发送到System.err。所有内部消息都以字符串“log4j:”开头

    作为测试,您还可以将文件属性更改为以下内容:

    log4j.appender.sift.appender.file=./$\\{session_id\\}.log
    

    表示当前文件夹(通常是项目根文件夹)。

    这里有多个问题

  • 首先将log4j.properties从项目根目录移动到“
    src/resources
    ”。然后,您将看到一个相关错误的世界

  • log4jjar没有这个包
    org.apache.Log4j.sift
    ,请将支持pax的日志jar添加到您的类路径中

  • 它还将有助于使用Karaf OSGi MDC或Camel MDC,因为ApacheKaraf使用Pax日志作为日志系统。(但我不确定没有OSGi它将如何工作)


  • 您的问题不在于这一行
    log4j.appender.sift.appender.file=./$\{session\u id\\}.log
    ,只要路径是
    /$\{session\u id\\}.log
    在正确配置所有其他内容后,应在项目根目录中创建日志文件。

    我必须使用log4j,因为我要附加到现有的生产代码,我只想添加到现有配置中“log4j内部日志记录”这意味着什么?它用于什么?
    定义log4j.configDebug变量
    将其设置为什么值?定义键
    log4j.configDebug
    应该已经足以启用日志记录(请参阅log4j code
    LogLog
    ),但我想如果将该值设置为true,则不会有什么影响。定义此值会使log4j将log4j内部调试语句打印到System.out。我已经在属性文件中添加了
    log4j.configDebug=true
    ,但它没有帮助您是否在日志中看到一个以
    setFile开头的条目,名为:
    ?为什么
    log4j jar没有这个包org.apache.log4j.sift
    ,请看本教程,它不建议将
    pax日志jar添加到类路径中。
    tutorial:您可以自己分解jar文件并查看该包是否存在。其次,该教程确实说,
    让我们看看Fuse-ESB最新发行版的org.ops4j.pax.logging.cfg,它目前是4.4.1-Fuse-03-06。
    这意味着它正在使用Karaf,我已经建议过了。该教程还提到了“org.ops4j.pax.logging.cfg文件”,您认为这是从哪里来的。
    2016-05-09 01:35:57 - Bob says hi
    
    setFile called: "+fileName+"
    
    log4j.appender.sift.appender.file=./$\\{session_id\\}.log