Log4j2 – Basic Logging For Java Development – Eclipse

Log4j2_Example

The purpose of this exercise is to implement Log4j2 as a console logger and file logger for Java development.

1. Download apache-log4j-2.3-bin.zip

2. In Windows explorer create a /lib/ folder in you project parent folder if one does not exist, typically the same folder that contains your /src/ package folder.

3. In Windows explorer move log4j-api-2.3. and log4j-core-2.3 jar files from the zip into the /lib/ folder you created

4. Right click and refresh your project in Eclipse Package Explorer to make the /lib/ folder visible

5. Right click log4j-api-2.3 and log4j-core-2.3 in the /lib/ folder and select Build Path -> Add to Build Path

  • /lib/ is not a package folder, /src/ is a package folder

6. Create log4j2.xml in your project /src/ folder so it is part of your class path – this is your configuration file.

 <?xml version="1.0" encoding="UTF-8"?>
 <Configuration status="DEBUG">
 <Appenders>
 <Console name="Console" target="SYSTEM_OUT">
 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
 </Console>
 <File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
 <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
 </File>
 </Appenders>
 <Loggers>
 <Root level="debug">
 <AppenderRef ref="Console" />
 <AppenderRef ref="MyFile"/>
 </Root>
 </Loggers>
 </Configuration>

7. Create a text file in your project parent directory and save it as all.log

For some unknown reason the logger didn’t work correctly the first time and even though the files were in the right place and the setting were correct. The logger couldn’t find the configuration file initially. I tried moving log4j2.xml to /src/main/resources/ with no success. Only after moving it back to /src/ did it finally kick in. I found this to be the same case when I implemented it for the first time in another project.

 

Objects First With Java 5E – Chapter 02 Notes

Elements of class definitions : fields, constructor, and methods.

The class header is top part of the outer wrapping of the class that essentially names the class ie

public class Car
    {
        class body and definitions
    }

Public class Car is considered the class header. Unlike methods there is no parameter list.

By convention we always start class names with a capital letter to help distinguish them from field and methods.

“public” and “class” are Java keywords or reserved words. Keywords are always lowercase.

The inner part of the class is where we define the field, constructor, and methods.

Fields provide a place to store long-lasting data (ie, persistent data). Fields store data persistently within an object.

Though data is persistent it can still change. Fields values can change often, hence the name variable.

The constructors are responsible for initializing an object correctly when it is first created.

Once the object has been created, the constructor plays no further role in that objects life.

In Java fields are automatically initialized to a default value if they are not explicitly initialized. Interger fields default is zero. Boolean default value is false. The default value of any object reference is null.

** Understand constructor / method space **

Is the constructor space is used to store parameters during the object creation? Does the constructor / method space take up space in memory? Am I overthinking this?

public Car(int topSpeed)

formal parameter is the name given to the parameter and actual parameter is the value supplied for the parameter.

The methods implement the behavior of an object; they provide it’s functionality.

There are two types of methods: accessor and mutator method. Alternatively get and set methods respectively.

Best practice define all fields at the start of the class definition.

For now we will always define fields as private.

Parameters are variables that are defined in the header of a constructor or method.

** Java does allow void methods to have a special return statement. This takes the form

return;

and simple causes the method to exit without executing any further code.

Exercise 2.8 Check whether or not it is possible to leave out the public from the outer wrapper of the TicketMachine class.

Exercise 2.8 It is possible to leave out public from the class and it appears to compile correctly.

Exercise 2.9 It in not possible to leave out the class from the outer wrapper of the class header. Class, enum or interface expected.

Exercise 2.11 What are two features of the constructor that make it look signifigantly different from the methods of the class.

Exercise 2.11 The two main features that make the constructor different from the methods of the class is that no return type is specified in the constructor and method names do not start with capital letters.

Exercise 2.22 The following obect creation will result in the constructor  of the Dat class being called. Can you wirte the constructor’s  header?

new Date("March", 23, 1861)

Exercise 2.22

public Date(String month, int day, int year)

Exercise 2.28 Compare the method headers of getPrice and printTicket. Apart from their names what is the main difference between them?

Exercise 2.28 getPrice has a return type of int while printTicket has a void return type.

Exersise 2.29 insertMoney and printTicket do not have return types becuase they are not accesor methods.

Exercise 2.33 score = score + points;

Exercise 2.34 The increase method is a mutator method. We can demonstrate this using an accessor method that returns the points field to view the changes that the increase method made.

Exercise 2.35 price = price – amount;

 

Objects First With Java 5E – Chapter 01 Notes

Objects are categorized by class.

Objects may be categorized as – and a class describes, in an abstract way – all objects of a particular kind.

ie ; Car is the class and ford focus an object of the Car class.

The word “instance” is synonymous with the word “object”, and will be used interchangeably.

ie : ford focus is an instance of the Car class

Convention : name of a class should start with a capital letter and name of an object or instance of that class should start with a lowercase letter.

ie : fordFocus is an object instance of the Car class

Methods represent operations that can be used to manipulate objects. We communicate with objects by calling or invoking methods

The word “function” is synonymous with the word “method” and will be used interchangeably.

Sometimes methods require parameters to provide additional information for a task.

The top line of code for a method is the header and is known as the signature for that method. in this case void setCarType(String newCarType) is the method signature.

void setCarType(String newCarType)
    {
        carType = newCarType;
    }

Parameters have data types. Data types define what type of data will be passed into method as parameters.

ie : int, String, double, boolean

There are two kinds of data type : primitive data type and object data type.

A variable is created and the primitive data type is stored directly in that variable

An objects exists and a reference to that object is stored in the variable to make that variable an Object data type

You may create multiple instances of objects of a single class.

Obects have state. State is represented by values in fields that define the object. All the data values together in an objects fields are referred to as an object’s state.

The word “field” is synonymous with the word “instance variable” and is used interchangeably.

Objects of the same class have the same number, name and type of fields.

Objects of the same class have the same number, name, and type of methods.

The following is an example of creating a new object of the Car class and calling on a method of that object.

Car car1 = new Car();
car1.setCarType();

On the first line we create the car1 object by first declaring it and assigning it to new Car object.  On the second line we call a method on that object by first typing the object name followed by a dot, followed by the method name, followed by a parameter list.

Parenthesis indicate a parameter list. Anything within the parenthesis is considered part of the parameter list.

All java statements end with a semi colon ;

Method Calling. Objects can communicate by calling eachothers methods.

The source code of a class determines the structure and behavior (the fields and the methods)of each of the objects of that class.

Methods may return infomation about an object via a return value.

Return type is that data type that is returned as a result of calling a method

The return type is specified in the signature of the method. If a void return type is specified then the method does not have a return statement and does not return any data.

public String getCarType()
    {
        return carType;
    }

In the previous code we see String specified as the return type in the method signature. We also see the return statement in the body of the method.

Objects can be used as parameters as long as the object class is specified as the object data type in the method header.

public void addCar(Car newCar)
    {
        carList.add(newCar);
    }

Exercise Questions

1.14 How do you think the House class draws the picture?

1.14 The House class calls the draw() method that in turn creates instances of the objects needed to form the picture.

1.33 Write the signature for a method named send that has one parameter of type String, and it does not return a value.

public void send(String msg)

1.34 Write a signature for a method named average that has two parameters both of type int, and returns an int value.

public int average(int firstInt, int secondInt)