• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:StrutsのCommonsLoggingについて質問です。)

StrutsのCommonsLoggingについて質問です

このQ&Aのポイント
  • Strutsでcommons loggingを使う際、ログインスタンスを取得する際には、private static Log log = LogFactory.getLog(this.getClass())、private Log log = LogFactory.getLog(this.getClass())、Log log = LogFactory.getLog(this.getClass())の3つの書き方があります。
  • しかし、private, staticがあるかないかによってログ出力するためにはどのような違いがあるのでしょうか?他のクラスからこの変数にアクセスがあるとは思えないので、なぜ必要なのか疑問です。
  • ネットで調べても分からず、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#86752
noname#86752
回答No.1

privateをつけなければ、そのクラスの作成者の意図に関わらず、その変数にアクセスできます。 例えばあなたが大規模な開発に携わり、あなたが作ったクラスが会ったこともない人に使われるような場合、あなたがマニュアルやコメントに「この変数logにはアクセスしてはいけません」と書いても、どこかの誰かがそんなことを無視してアクセスしてしまいます。 loggingに限らずprivateとはそういうものを防ぐために行われます。(つまりloggingの問題ではなくJavaという言語がそういうことを防げるような仕組みを持っているということになります。)

blacksawa
質問者

お礼

どうもありがとうございます。 今回初めてJavaの開発に携わっているのですが、 自分の作っている画面だけを考えてなぜprivateが必要なのだろう???と思っていたのですが、すっきりしました。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • デバックログの出し方

    「commons」の「Logging」を使用し検証しています。 下記のソースで、「log.isDebugEnabled()」がTRUEとならず デバックログが出力されません。 他の「log.fatal」などの出力は問題ありません。 別ファイルに設定などが必要でしょうか?。 アドバイスお願いします。 --------------------------------------------- import org.apache.commons.logging.*; public class LogTest {  //ログインスタンスを取得  public static Log log = LogFactory.getLog(LogTest.class);  /**   * @param args   */  public static void main(String[] args) {   // 致命的なエラーの出力   log.fatal("fatalメッセージ");   // 通常のエラーの出力   log.error("errorメッセージ");   // 警告の出力   log.warn("warnメッセージ");   // 情報の出力   log.info("infoメッセージ");   // デバッグ情報の出力   log.debug("debugメッセージ");   // 詳細なデバッグの出力   log.trace("traceメッセージ");   try { throw new Exception("Error Message");   } catch (Exception e) { // Exceptionのスタックトレースを出力 log.error("Error Occurs:", e);  }  int[] ary = new int[10000];  if (log.isDebugEnabled()) {   for (int i = 0; i < 10000; i++) {   log.debug("array[" + i + "]=" + ary[i]);  } } } }

    • ベストアンサー
    • Java
  • StrutsでのClassNotFound

    現在、Java開発環境及びStrutsフレームワークの設定を行なっています。 動作確認のため、"Hello World"を画面に表示させるプログラムを作成したのですが、Tomcat起動時に以下のエラーがeclipseのコンソールに表示されてしまいます。 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) <<以下略>> 恐らくjarファイルが不足していると思うのですが、何が不足しているのかが分かりません。 あるいは違う原因があるのでしょうか。 使用しているjarファイルは以下となります。 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist.jar ognl-3.0.5.jar struts2-core-2.3.4.jar xwork-core-2.3.4.jar 【参考サイト】 http://www15.plala.or.jp/k_maeba/struts2/hello/index.html フォルダ構造は上記ページの通りになっています。 【動作環境】 OS:Windows7 pro 開発環境:Eclipse IDE for Java Developers Tomcat:7.0.28 Java:jdk1.7.0_04 Stuts:2.3.4 お手数ですが、解決策のご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • Commonsによるロギング

    いつもお世話になってます。 実は既存ソースを調査しているのですが、「Jakarta Commons」という ログ出力ライブラリを使用しているようです。 そこでこの「Commons」が「log4j」という別ライブラリを使用して いるか、確認する必要が出ています。 ※「log4j」と「Logging」で選択ができるようです この使用の有無はどこで判断すれば良いのでしょうか?。 既存ソースには「log4j.xml」というファイルはありました。 これで使用している、と判断して良いでしょうか?。 また「Logging」と「log4j」の違いが良くわかりません・・。 簡単で結構ですので、違いの概要を併せて頂けますと助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのクラスについて質問です。

    class test{ private static int sum=1; となっていた場合にtestクラスの外からsumの値を取得し testクラスの外から出力するには、testクラス内と外のクラスにどのような記述をすればいいでしょうか?

  • StrutsのValidatorについて

    Struts1.2.7 で開発を始めました。 validator の勉強をしているのですが、リソースファイルの設置場所がわからず困っています。 WEB-INF/struts-config.xml に下記記述をしています。 message-resources parameter="resources.application" この場合は下記のようにリソースファイルを設置すれば良いと思っていますが、 WEB-INF/classes/resources/application.properties うまく動きません。 手元の本には、「クラス/ソースパッケージツリーのresourcesパッケージに作成」とあります。 ValidatorResources not found in application scope under key "org.apache.commons.validator.VALIDATOR_RESOURCES" このようなエラーが別途出力されています。

    • ベストアンサー
    • Java
  • ネストトップクラス・メンバクラスについて

    現在、SJC-P取得に向け独学でJavaの勉強中です。 ネストクラス・インナークラスについて勉強している最中なのですが、 数冊テキストを読み込んでも、web検索をしても、イマイチよくわからない・・・というのが正直なところです。 どのクラス(アウタークラス/staticインナークラス/非staticインナークラス)の、 どういうメンバ(static/非static/private/final)が、 どのクラスのどういうメンバにアクセス出来るのかが整理しきれません・・・。 わからないなりに、まとめてみたのですが、理解が不十分で、かつ、この下記の通りの理解で正しいのかどうかもわかりません。 (言葉でうまく表現も出来ていない箇所も・・) また理解すべきポイントに不足があるかと思います。 どこが正しく理解出来ているのか・どこがどう間違っているかの指摘及びその内容・理解不足の箇所・よりわかりやすい例の追加や補記など、どうかよろしくお願い致します。 ●staticなインナークラス(=ネストトップクラス)について ・アウタークラスのインスタンスなしに、staticなインナークラスのインスタンスの生成が出来る。 ・staticなインナークラスからはアウタークラスの非staticメンバを直接アクセス出来ない。 (→ただし、staticアウターメンバになら直接アクセス出来る?staticであればprivateでもアクセス可?) ・staticなメソッド内で非staticなインナークラスのオブジェクトが生成出来ない。 ●非staticなインナークラス(=メンバクラス)について ・非staticなインナークラス内にstaticなメンバを持つことは出来ない。 ・アウタークラスのインスタンスを生成してからでないと非staticなインナークラスのインスタンスは生成出来ない。 ・アウタークラスの非staticメンバ及びstaticメンバに直接アクセス出来る。 ●アウタークラス(=外部クラス)について ・アウタークラスのstaticメソッド内で非staticなインナークラスのインスタンスは生成出来ない。 ・非staticインナークラスのメンバ及び、staticなインナークラスのメンバにアクセス出来る。 --------------------------------------------------------- (例)処理はさておき、定義はこんな感じを思い描いております・・ class Outclass{   private int aa;   private static int bb;   private outMethod1();   private static outMethod2();   class NotStaticInner{     private int cc;     //private static int dd;//不可     private inNotStaicMethod1();     //private static inNotStaticMethod2();//不可   }   class StaticInner{     private int ee;     private static int ff;     private inStaticMethod1();     private static inStaticMethod2();   } } 参考テキスト: 『Sun Certified Programmer for Java2 Platform5.0 Exam【310-055】』のChapter11:「ネストクラス・インナークラス」 参考URL: http://wisdom.sakura.ne.jp/programming/java/java46.html

  • digesterが動きません

    Digesterをいじる http://www.h7.dion.ne.jp/~s_wat/jakarta/digester.html を見てDigesterを動かしてみようと思ってやっているのですが、Javaをコンパイルするとorg.apache.commons.digesterは存在していませんと出ています、クラスパスがしっかり通ってないからだと思っているのですが、どうにもなりません。 C:\PracticeJAVA\j2sdk1.5.0_07\bin;C\PracticeJAVA\jakarta-struts-1.1\lib\struts.jar;C:\tomoo\commons-beanutils.jar;C:\tomoo\comoons-beantils-bean-collections.jar;C:\tomoo\commons-beanutils-core.jar;C:\tomoo\commons-collections-3.2.jar;commons-collections-testframework-3.2.jar;C:\tomoo\commons-logging-api-1.1.jar こんな感じで環境変数設定したのですが、どう直したら良いでしょうか? お願いします。

  • Struts2でのStaticイニシャライザ

    Struts2でのインターセプターにてStaticイニシャライザを実行するとエラーになってしまいます。 ファイルの絶対パスを取得しようとしています。 以下がそのコードなのですがTomcat再起動時にイニシャライザが実行され getRealPath()の部分で例外が発生し、java.lang.ExceptionInInitializerError が発生します。 同じコードをintercept()メソッド内に記述した場合は例外が発生せず絶対パスを取得することが できます。どなたか原因及び対処方法がおわかりになられますでしょうか。 public class CheckValueInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; //ファイルの絶対パスの取得 static { ServletContext context = ServletActionContext.getServletContext(); String path = context.getRealPath("/WEB-INF/Test.txt"); } public String intercept(ActionInvocation invocation) throws Exception { } }

    • ベストアンサー
    • Java
  • struts2のchainで値の受け渡しができない

    Java 6 Update 22 struts2.2.1 です。 次のとおり各クラスとstruts.xmlを作成しました。 Top_guestLoginアクションを実行してHelloUserクラスに遷移することはできましたが、変数isGuestModeの値が受け渡しされません。 public class Top implements SessionAware { private boolean isGuestMode = false; public boolean getIsGestMode() { return isGuestMode; } public String guestLogin() throws Exception { isGuestMode = true; return "success"; } } public class HelloUser { private boolean isGuestMode; public boolean getIsGuestMode() { return isGuestMode; } public void setIsGestMode(boolean b){ isGuestMode = b; } public String execute() throws Exception { return "success" ; } } struts.xml <package name="example" extends="struts-default"> <action name="HelloUser" class="example.HelloUser"> <result>/example/HelloUser.jsp</result> </action> <action name="Top_guestLogin" method="guestLogin" class="example.Top" > <result name="success" type="chain" >HelloUser</result> </action> </package> 何方かアドバイスをお願い致します。

    • ベストアンサー
    • Java
  • ◆完全に、privateなメソッドにしたい

    クラスA内に、 privateで、staticなメソッド「hogehoge」を作った時、 完全に、「hogehoge」の中の変数・Inputパラメータ、Outputパラメータだけで処理をさせたいです。 ◆具体例:(こういうのをできないようにしたい) クラスA.h static 変数X static 変数Y static メソッド hogohoge (略) クラスA.cpp メソッド hogohoge (略) { z = 変数X + 変数Y } //---------------------------------- ◆やりたいこと メソッド上のように、変数Xや、変数Yにアクセスできてしまうのを、制限したいのです。  例えば、pragmaとかを書いて、オプションで制限できたりできないでしょうか? 完全に、「hogehoge」の中の変数・Inputパラメータ、Outputパラメータだけで処理をさせたいです。 また、今回はstatic 変数だけを引き合いに出しましたが、  他にも「実はアクセスできちゃうんだよね」というものがあれば、  (例えばdefineとか?) ご教授頂けるとさらに嬉しいです。 .