سؤال

أولا بعض المعلومات الأساسية عن التطبيق. لدي تطبيق معالجة العديد من المهام المستقلة بالتوازي عبر بركة الموضوع. تجمع مؤشرات الترابط الآن معلقة.

وفيما يلي مقتطف من وجهة نظري مقالب موضوع، يتم حظر كل ما عندي من المواضيع في تجمع-2 من قبل "تجمع-2-موضوع-78". ويبدو أن يكون مؤمنا محاولة الكتابة إلى وحدة التحكم التي أجد غريبا للغاية. يمكن لأي شخص أن يلقي أي ضوء على الوضع بالنسبة لي؟

تعديل : ل تفاصيل منصة نسخة جافا "1.6.0_07" جافا (TM) SE بيئة وقت التشغيل (بناء 1.6.0_07-B06) جافا بؤرة (TM) العميل VM (بناء 10.0 B23، الوضع المختلط، وتقاسم)

والخادم أوبونتو لينكس المزدوجة آلة رباعية النوى.

ويبدو أن يقفل عند الكتابة إلى printstream، لقد نظرت فقط إزالة appender حدة ولكن أود أن أعرف لماذا بدلا فإنه يتم حظر وإزالته على أساس هذه المعرفة. في الماضي إزالة ونرى ما اذا كان يعمل قد حان مرة أخرى لدغة لي:)

والقسم المختص من وجهة نظري log4j

<اقتباس فقرة>   

وlog4j.rootLogger = DEBUG، STDOUT   log4j.logger.com.blah = INFO، LOG   log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender   log4j.appender.LOG = org.apache.log4j.FileAppender

والموضوع تفريغ استخراج

<اقتباس فقرة>   

و"تجمع-2-موضوع-79" معرف = 149 حظر على   org.apache.log4j.spi.RootLogger@6c3ba437   المملوكة من قبل "تجمع-2-موضوع-78" معرف = 148 في   org.apache.log4j.Category.callAppenders (Category.java:201)     في   org.apache.log4j.Category.forcedLog (Category.java:388)     في   org.apache.log4j.Category.error (Category.java:302)     في   com.blah.MessageProcessTask.run (MessageProcessTask.java:103)     في   java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441)     في   java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask / جافا: 268)     في   java.util.concurrent.FutureTask.run (FutureTask / جافا: 54)     في   java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:885)     في   java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907)     في   java.lang.Thread.run (Thread.java:619)

     

و"تجمع-2-موضوع-78" معرف = 148 RUNNABLE في   java.io.FileOutputStream.writeBytes (الأصلية   طريقة) في   java.io.FileOutputStream.write (FileOutputStream.java:260)     في   java.io.BufferedOutputStream.write (BufferedOutputStream.java:105)     - مؤمن <0x6f314ba4> (أ java.io.BufferedOutputStream) في   java.io.PrintStream.write (PrintStream.java:430)     - مؤمن <0xd5d3504> (أ java.io.PrintStream) في   org.apache.log4j.ConsoleAppender $ SystemOutStream.write (ConsoleAppender.java:173)     في   sun.nio.cs.StreamEncoder.writeBytes (StreamEncoder.java:202)     في   sun.nio.cs.StreamEncoder.implFlushBuffer (StreamEncoder.java:272)     في   sun.nio.cs.StreamEncoder.implFlush (StreamEncoder.java:276)     في   sun.nio.cs.StreamEncoder.flush (StreamEncoder.java:122)     - مؤمن <0x6243a076> (أ java.io.OutputStreamWriter) في   java.io.OutputStreamWriter.flush (OutputStreamWriter.java:212)     في   org.apache.log4j.helpers.QuietWriter.flush (QuietWriter.java:57)     في   org.apache.log4j.WriterAppender.subAppend (WriterAppender.java:315)     في   org.apache.log4j.WriterAppender.append (WriterAppender.java:159)     في   org.apache.log4j.AppenderSkeleton.doAppend (AppenderSkeleton.java:230)     - مؤمن <0x45dbd560> (أ org.apache.log4j.ConsoleAppender) في   org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders (AppenderAttachableImpl.java:65)     في   org.apache.log4j.Category.callAppenders (Category.java:203)     - مؤمن <0x6c3ba437> (أ org.apache.log4j.spi.RootLogger) في   org.apache.log4j.Category.forcedLog (Category.java:388)     في   org.apache.log4j.Category.error (Category.java:302)     في   com.blah.MessageProcessTask.run (MessageProcessTask.java:103)     في   java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441)     في   java.util.concurrent.FutureTask $ Sync.innerRun (FutureTasك / جافا: 268)     في   java.util.concurrent.FutureTask.run (FutureTask / جافا: 54)     في   java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:885)     في   java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907)     في   java.lang.Thread.run (Thread.java:619)

هل كانت مفيدة؟

المحلول

هل يمكن استخدام AsyncAppender لفصل أفضل مسجل من appenders.

في ويندوز، إذا قمت بالنقر فوق في إطار وحدة التحكم، وهذا سوف إيقاف وحدة التحكم، على سبيل المثال، سوف المخزن المؤقت المعياري تملأ، وبما أن وحدة التحكم appender يكتب بشكل متسلسل، وطلبك معطلا حتى يتم تحرير وحدة (دخول الصحافة أو نحو ذلك).

والنظر في استخدام AsyncAppender مع log4j - أكثر من مرة أنها فكرة جيدة - على بيينغ المشكلة الوحيدة - لا يتم مسح المخزن المؤقت AsynAppender تماما على الخروج

نصائح أخرى

أولا، وأعتقد log4j يكتب إلى ملفات وحدة متسلسل وإلا سوف يكون معطوبا جميع السجلات الخاصة بك. وذلك في حين مؤشر واحد هو كتابة موضوع آخر يريد أن يكتب أن ينتظر حتى يتم الانتهاء من الآخر. أيضا، يمكن المعياري منع إذا كل ما يرد إليها على الطرف الآخر لا يستنزف ذلك.

وفي يونيكس هناك اصف ملف خاص يسمى المعياري. عند بدء تشغيل سيلحق التطبيقات في المعياري وحدة إلى وحدة التحكم. يمكنك أيضا إعادة توجيه المعياري إلى ملفات أخرى. مثلا: جافا بلاه> / ديف / لاغية. وهناك احتمالات لديك المعياري لافتا إلى ملف يملأ. على سبيل المثال أنبوب هو ملف وإذا كان البرنامج في الطرف الآخر لا يستنزف الأنابيب ثم البرنامج الذي يكتب للأنابيب ومنع في نهاية المطاف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top