小编Roh*_*ver的帖子

如何设置log4j属性,以便每个线程输出到自己的日志文件?

我有任何给定时间运行的线程类的多个实例.我有log4j设置用于记录需求.

我需要一种方法来设置log4j,以便我的线程类的每个实例在不同的日志文件中输出其日志.

这是我做的(伪代码)

public class doSomething extends Thread {

    private Logger d_logger;

    public doSomething(int id){
       d_logger = Logger.getLogger("doSomething"+id);
       String logFileName = "doSomething"+id+".log";

       Properties prop = new Properties;
       prop.setProperty("doSomething"+id,"DEBUG, WORKLOG");
       prop.setProperty("log4j.appender.WORKLOG","org.apache.log4j.FileAppender");
       prop.setProperty("log4j.appender.WORKLOG.File", logFileName);
       prop.setProperty("log4j.appender.WORKLOG.layout","org.apache.log4j.PatternLayout");
       prop.setProperty("log4j.appender.WORKLOG.layout.ConversionPattern","%d %c{1} - %m%n");
       prop.setProperty("log4j.appender.WORKLOG.Threshold","INFO"); 

       PropertyConfigurator.configure(prop);
    }

    public void run(){
       d_logger.info("Starting to doSomething number" + id);
    }

}
Run Code Online (Sandbox Code Playgroud)

虽然上面为我实例化的每个线程创建了一个文件,但它不会向这些文件输出任何内容.任何帮助深表感谢.

java multithreading log4j

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

捕获EmptyStackException与Testing是否为空

我有一个Stack对象由多个线程处理.其中一个线程是一个工作线程,它对Stack对象执行pop操作.我想处理堆栈为空的情况,我看到两个选项

try{
    Object obj = (Object) d_stackObj.pop(); 
   } 
catch (EmptyStackException e) 
   { ...}
Run Code Online (Sandbox Code Playgroud)

要么

if( ! d_stackObj.empty() ) 
   Object obj = (Object) d_stackObj.pop(); 
else
   { ...}
Run Code Online (Sandbox Code Playgroud)

我的问题是,上述哪种方法更好,为什么?

谢谢!

java stack exception-handling

3
推荐指数
1
解决办法
7061
查看次数

AtomicInteger公平吗?

AtomicInteger是否提供任何公平保证?像先到先得的线程执行顺序呢?Victor Grazi同时动画的动画片例绝对没有表现出任何这样的公平性.我搜索过,但没有找到任何结论.

java integer atomic

3
推荐指数
1
解决办法
298
查看次数

在MDX查询中使用NOT IN

我正在尝试从MDX选择查询中的维度中过滤掉一些点。我已经使用了http://mondrian.pentaho.com/documentation/mdx.php中记录的Filter(,)函数。正在运行的MDX如下

  SELECT {[Measures].[AMOUNT]} on 0,  
         {Filter ([DIM1].MEMBERS, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} on 3, 
         {[CURRENCY].[EUR]} on 4
  from [CUBE]
Run Code Online (Sandbox Code Playgroud)

但是Measures.AMOUNT仍在考虑Dim1.A,Dim1.B和Dim1.C。能否请您指出我的语法有什么问题?我也尝试了Except(,)。

最好,罗汉

更新:

感谢Marc,为我指出了正确的方向。我进行了更多测试,发现Member函数还返回一个点“ All”,其中包括我维度上的所有点。因此,即使Filter()或Except()函数正确地过滤了点,“全部”点仍包含所有点的值,因此将它们包括在Measure.AMOUNT计算中。相反,我使用了Children函数,该函数未返回“ All”点,因此我看到了所需的结果。更新了下面的MDX

使用Filter和NOT IN来工作MDX(警告:NOT IN是Mondrian特定的操作)

 SELECT {[Measures].[AMOUNT]} on 0,  
         {Filter ([DIM1].Children, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} on 3, 
         {[CURRENCY].[EUR]} on 4
  from [CUBE]
Run Code Online (Sandbox Code Playgroud)

使用MDX除外

 SELECT {[Measures].[AMOUNT]} on 0,  
         {except ( {[DIM1].Children}, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} …
Run Code Online (Sandbox Code Playgroud)

mdx mondrian

3
推荐指数
1
解决办法
7923
查看次数